Hello,
Hallo Tom,
Und wenn man die Formularelemente auch noch günstig benennt, so dass PHP die Werte als Array bekommt, kann man bequem mit einer Schleife darüber iterieren.
Zu diesem Zweck sollte man aber nicht über das POST-Array iterieren
natürlich nicht stur über $_POST in seiner ganzen Pracht, sondern nur über bekannte Gruppen. In einem Bestellformular für eine Pizza mit 5 wählbaren Zutaten würde ich die Checkboxen beispielsweise mit topping[0] bis topping[4] benamsen und dann mit 0..4 über $_POST['topping'][$i] herfallen und die isset-Abfragen machen.
sondern über das Kontrollarray (das z. B. in der Session wartet) und dessen Elemente mit dem POST-Array abgleichen.
Das kann man natürlich auch, obwohl mir das im Moment etwas zu kompliziert erscheint.
Wenn man beim Abgleich die gefundenen Elemente aus dem POST-Array löscht (unset()), bleiben dort nur die unerwünschten übrig. Sollte es welche geben, ist der POST gefaked.
Was ich in den meisten Fällen nicht schlimm fände; ich würde unerwartete zusätzliche Parameter einfach ignorieren. Oder möchtest du dann die Bearbeitung abbrechen und eine Antwort "Böser Betrüger! Tu das nie wieder!" senden? 😀
-
Ich würde zu einem HTTP-Response Code 406 unter Beifügen der Meldung "es ist ein Fehler aufgetreten, bitte Anfrage wiederholen" und ggf. dem (soweit zulässig) vorausgefüllten Formular reagieren {1}
-
im Application Log würde ich den Vermerk "wrong post params" mit IP, Uhrzeit und Name des Moduls/Skripts hinterlassen, damit Fail2ban sich darum kümmern kann.
Das hat erstmal nichts mit unplausibel ausgefüllten Dialogelementen zu tun. Diesen Fall muss man extra betrachten.
Der User (Bot?) muss von den Hintergrundmaßnahmen darüberhinaus nichts mitbekommen.
BTW:
Ich plädiere für das Wiki an dieser Stelle übrigens dafür, sich nicht ellenlang über die "richtige" Formulargestaltung mit Labels und sonstigen durchaus an anderer Stelle wichtigen Dingen auseinanderzusetzen, sondern eher auf die PHP-relevanten Verfahren einzugehen.
Glück Auf
Tom vom Berg
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.