Hi,
Beim sprintf() von PHP gibt es ja gar kein %i. Könntest du mir sagen, welcher von den Specifiers einem „normalen“ Integer gleichkommt?
das wäre dann wohl %d für decimal. In C sind %d und %i (für integer) äquivalent, und ich meine, ich hätte aus lauter Gewohnheit auch in PHP schon %i verwendet. Kann sein, dass das angesichts der Verwandtschaft zu C auch stillschweigend unterstützt wird, auch wenn es nicht dokumentiert ist. Alternativ gibt es noch %u (unsigned).
Bedenke auch, dass böse Buben vielleicht gar nicht dein Formular oder deine Web-App verwenden, um Daten an dein Script zu senden. Sondern Tools wie wget oder curl, mit denen sie sorgfältig handgestrickte Requests bauen können, die deine aufgestellten Regeln ganz gezielt verletzen.
Nun, kann ich mit PHP nicht überprüfen, ob der POST-Request vom Formular stammt oder von irgendwo anders?
Nein. Wenn der Angreifer gut ist, kann er die Umgebung überzeugend nachbilden. Du kannst nur überprüfen, ob die gelieferten Werte deinen Regeln und Vorstellungen entsprechen.
Es ist ein Abgrund mit den potenziellen Sicherheitslücken.
Wohl wahr ...
Einen schönen Tag noch
Martin
Wie man sich bettet, so schallt es heraus.