Externes Erstellen von Posts ungültig [RC7]

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
KonKorT
Mitglied
Beiträge: 18
Registriert: 04.04.2007 13:40

Externes Erstellen von Posts ungültig [RC7]

Beitrag von KonKorT »

Hallo,

beim Umstieg von RC5 auf RC7 ist mir aufgefallen, dass mein direktes Kommentieren unter News (Thread im Forum erstellt) nicht mehr funktioniert. Es kommt die Meldung, dass der Beitrag ungültig wäre.

Ich muss sagen, dass ich auf meiner Hauptseite folgenden Beispielcode habe:

Code: Alles auswählen

<form id="kommentarformular" method="post" action="/forum/posting.php?mode=reply&f=57&t=2019">
	  <input type="hidden" name="f" value="57" />
          <input type="hidden" name="t" value="2019" />
	  <input type="hidden" name="post" value="Submit" />

	  <input type="hidden" name="topic_cur_post_id" value="9808" />
	  <input type="hidden" name="lastclick" value="1192534656" />
	  <input type="hidden" name="subject" value="Re: Intel-Eaglelake-Chipsätze ab Q2 2008" />
	  <input type="hidden" name="attach_sig" value="on" />
	  <input type="hidden" name="icon" value="0" />
	  <input type="hidden" name="site" value="/news.php?news=1471" />
	  <textarea name="message" cols="67" rows="6"></textarea><br />
	  <input type="submit" value="Abschicken" />

          <input type="reset" name="reset" value="Zur&uuml;cksetzen" />
        </form>
In der posting.php habe ich dann bisher einfach folgendes zur Rückleitung eingesetzt:

Code: Alles auswählen

if(isset($_POST["site"]))
{
 header("Location: http://www.hardware-infos.com".$_POST["site"]."");
}
Dort taucht jetzt besagter Fehler auf beim Erstellen. Habe mich dann mal in die posting.php vertieft und bin auf folgende Codezeile gestoßen:

Code: Alles auswählen

// check form
 if (!check_form_key('posting', false, '', false, 2))
 {
  $error[] = $user->lang['FORM_INVALID'];
 }
Diese Codezeile verursacht, dass ich die "neue" Fehlermeldung bekomme. Entferne ich die fünf Zeilen, erstellt er wieder einen Beitrag.

Meine Frage: Wie kann ich meine Message valide machen, gibt es irgendwelche anderen Möglichkeiten als den Code schlichtweg herauszunehmen?

Vielen Dank!
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Versuch:
find:

Code: Alles auswählen

</form>
ersetze mit:

Code: Alles auswählen

{S_FORM_TOKEN}</form>
kein Support per PN
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Hier noch ein Auszug aus den neuesten Coding Guidelines:
Altering Operations:
For operations altering the state of the database, for instance posting, always verify the form token, unless you are already using confirm_box(). To do so, make use of the add_form_key() and check_form_key() functions.

Code: Alles auswählen

	add_form_key('my_form');

	if ($submit)
	{
		if (!check_form_key('my_form'))
		{
			trigger_error('FORM_INVALID');
		}
	}

The string passed to add_form_key() needs to match the string passed to check_form_key().

Another requirement for this to work correctly is that all forms include the {S_FORM_TOKEN} template variable.
KonKorT
Mitglied
Beiträge: 18
Registriert: 04.04.2007 13:40

Beitrag von KonKorT »

Das mit dem

Code: Alles auswählen

{S_FORM_TOKEN}

ist ja leider nicht möglich, da ich keine phpBB-Datei include, entsprechend auch nicht auf die Variablen zugreifen kann.

Kann ich denn nicht einfach auch ein

Code: Alles auswählen

add_form_key('news');


nehmen, denn meine Datei heißt ja news.php
Zuletzt geändert von KonKorT am 16.10.2007 18:56, insgesamt 1-mal geändert.
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Dann zeig doch mal die Exakte Fehlermeldung her!
kein Support per PN
KonKorT
Mitglied
Beiträge: 18
Registriert: 04.04.2007 13:40

Beitrag von KonKorT »

Das übermittelte Formular war ungültg. Versuche erneut, das Formular abzusenden.

Edit: Das mit dem add_form_key hat auch nicht funktioniert.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Damit es funktioniert musst Du alle benötigten Dateien für eine externe, eigene Seite einbinden. Ansonsten funktioniert es nicht. ( Dies ist ja gerade der neue "Schutz". Es verhindert Einträge in die Datenbank, wenn sie vorher nicht durch den Token bestätigt worden sind )

--> http://olympuswiki.naderman.de/Adding_pages
KonKorT
Mitglied
Beiträge: 18
Registriert: 04.04.2007 13:40

Beitrag von KonKorT »

Wo mein gravierenderes Problem nunmehr gelöst wäre, kann man sich ja wieder diesem zuwenden. ;)

@ Dr.Death

Ich bin mir bewusst, dass das Problem wahrscheinlich nicht aufträte, wenn ich die phpBB-Daten include, aber genau das will ich ja gerade vermeiden. Ich müsste dann nämlich nur für {S_FORM_TOKEN} die gesamte Funktionsbibliothek des Forums übernehmen - das steht absolut in keinem Verhältnis.

Es würde mir schon reichen, zu wissen, was in dieser Variable für ein Wert steht. Diesen könnte ich dann ja auch einfach manuell erzeugen. Trotzdem schon mal vielen Dank für die Bemühungen, die Ihr bisher auf Euch genommen habt!

Edit: Habe gerade mal in der functions.php gestöbert und dort die Funktion gefunden. Was mir zum Glück fehlt ist folgendes, weiteres Feld:

<input type="hidden" name="form_token" value="c86b3f04284c8a89df91f7516470843073fe9ddd" />

die Frage ist nur, wie ich diesen value selbst erzeugen kann ;)

Wäre nett, wenn es das irgendwo zum Nachlesen gäbe.
KonKorT
Mitglied
Beiträge: 18
Registriert: 04.04.2007 13:40

Beitrag von KonKorT »

Habe mir jetzt schon sowas in die Richtung gebastelt, funktioniert aber noch nicht: Würde mich über Hilfe freuen:

Code: Alles auswählen

$abfrage = mysql_query("SELECT user_form_salt FROM phpbb_users WHERE user_id = '$userid'");
$ds = mysql_fetch_array($abfrage);

$salt = $ds["user_form_salt"];
$datei = "posting";

$form_token = sha1(time().$salt.$datei.$userid);
Benutzeravatar
Mahony
Ehemaliges Teammitglied
Beiträge: 12208
Registriert: 17.11.2005 22:33
Wohnort: Ostfildern Kemnat
Kontaktdaten:

Beitrag von Mahony »

Hallo KonKorT
Das hier sollte dir weiter helfen The submitted form was invalid. Try submitting again. - Fehlerbehebung für eigene Scripte




Grüße: Mahony
Wer fragt, ist ein Narr für fünf Minuten, wer nicht fragt, ist ein Narr für immer.
Antworten

Zurück zu „Coding & Technik“