Hallo Claus,
Also ich habe das Zitat von php.de so verstanden, dass ein Angreifer ein Formular nachbaut und darin statt Checkboxen zB ein Textfeld mit 'MailRecip' einfügt, um damit irgendwas unerwünschtes zu erwirken.
nenee, vergiss mal für einen Moment, dass es ein Formular gibt. Ein Angreifer in Spiellaune kann auch ohne Formular und ohne Browser einen HTTP-Request an dein Script absetzen, z.B. mit dem Kommandozeilentool wget.
Und damit kann ich dann beliebige Parameter übergeben - beliebig, sowohl was deren Namen angeht, als auch die Werte.
Die sinnvollere Methode finde ich, dass man eine Liste der erwarteten Felder hat und durch diese laufend schaut, ob dazu Eingaben vorliegen
Das mach ich doch, ich schaue, ob der Key in einem Array (als Konstante) existiert.
Ein guter Ansatz, wobei die von dedlfix angedeutete Methode, unerwartete Parameter einfach zu ignorieren, auch in Ordnung ist[1].
Und dann solltest du zu jedem erlaubten Parameter prüfen, ob auch der gelieferte Wert plausibel und vom richtigen Typ ist.
Könnte das die Lösung sein:
is_array($_POST['MailRecip'])
bevor ich die Werte prüfe, ein Textfeld als 'MailRecip' müsste dann ja auffallen?
In diesem Beispiel bestimmt vernünftig. Denn wenn dein Script ein Array erwartet, stattdessen aber nur einen einzelnen String bekommt, wird es einen Scriptfehler beim Zugriff auf ein Arrayelement geben.
May the Schwartz be with you
Martin
Ein Student ist im Begriff, sich in der Mensa zu einem Professor an den Tisch zu setzen.
Professor: Seit wann essen denn Adler und Schwein an einem Tisch?
Student: Okay, dann flieg' ich halt einen Tisch weiter.
Wobei man sich fragen kann, ob es sich lohnt, den Request überhaupt weiter zu bearbeiten, wenn er offensichtlich fake ist, oder ob man dann lieber das Script kontrolliert abbricht (z.B. mit Status 400). ↩︎