inputfeld mit min-, maxlength und required kann ausgetrickst werden - wie verhindern?
T-Rex
- formulare
- html
Moin,
hab hier ein Feld mit minlength und maxlength von 12. Es müssen also exakt 12 Zeichen eingegeben werden. Außerdem ist es required. Ergo darf das Formular meiner Auffassung nach erst abgeschickt werden wenn das Feld 12 Zeichen beinhaltet.
Klickt man ganz normal in das Feld und fängt an zu schreiben funktioniert alles wunderbar.
Der Browser speichert jedoch (öfter) getätigte Eingaben. Wählt man so eine Eingabe aus, kann man die Prüfung auf die 12 Zeichen anscheinend umgehen. Um genau zu sein mache ich folgendes. Ich klicke in das Feld - es ist noch leer. Mir wird vom Browser (Chrome) aus ein paar Einträge ähnlich einer Selektbox angezeigt. Klicke ich so einen Eintrag an, kann ich die Prüfung umgehen und das Formular sofort wegschicken.
Mir ist bewusst, dass ich diese Vorschläge ausschalten kann. Da sie mir jedoch beim Entwickeln helfen, sollten sie an bleiben. Ich schätze es ist ein Bug im Browser? Kann ich diesen irgendwie umgehen? Selbst würde mir Javascript einfallen. Nach jedem onchange würde ich das Feld nochmals bearbeiten und so versuchen die Prüfung zu erzwingen. Ist für mich aktuell aber eher ein doofer Workaround. Ideal wäre eine Lösung via html. Getestet habe ich es im Chrome 85.0.4183.121 (64 bit).
Gruß minlength=5, maxlength=5, required value=T-Rex
Hallo T-Rex,
hab hier ein Feld mit minlength und maxlength von 12. Es müssen also exakt 12 Zeichen eingegeben werden. Außerdem ist es required. Ergo darf das Formular meiner Auffassung nach erst abgeschickt werden wenn das Feld 12 Zeichen beinhaltet.
... aber Theorie ist, wenn jeder weiß, wie's gehen müsste, und dann geht's doch nicht. Anscheinend haben etliche Browser noch seltsame Hintertürchen (aka "Bugs") im Zusammenhang mit Eingabe-Validierung.
Der Browser speichert jedoch (öfter) getätigte Eingaben. Wählt man so eine Eingabe aus, kann man die Prüfung auf die 12 Zeichen anscheinend umgehen.
Da argumentieren die Browser-Programmierer vermutlich, dass Eingaben in der History ja schon einmal die Validierung durchlaufen haben (müssten), und demzufolge nicht noch einmal überprüft werden müssen.
Mir ist bewusst, dass ich diese Vorschläge ausschalten kann. Da sie mir jedoch beim Entwickeln helfen, sollten sie an bleiben.
Zumal du ja nicht wissen kannst, ob deine späteren Webseitenbesucher dieses Feature nicht auch nutzen. Trotzdem fällt mir keine wirkliche Lösung ein.
Live long and pros healthy,
Martin
Hallo
Der Browser speichert jedoch (öfter) getätigte Eingaben. Wählt man so eine Eingabe aus, kann man die Prüfung auf die 12 Zeichen anscheinend umgehen.
Da argumentieren die Browser-Programmierer vermutlich, dass Eingaben in der History ja schon einmal die Validierung durchlaufen haben (müssten), und demzufolge nicht noch einmal überprüft werden müssen.
Oder das ist einfach nur ein Edge-Case, den die Browser-programmierer nicht beachtet haben.
Mir ist bewusst, dass ich diese Vorschläge ausschalten kann. Da sie mir jedoch beim Entwickeln helfen, sollten sie an bleiben.
Zumal du ja nicht wissen kannst, ob deine späteren Webseitenbesucher dieses Feature nicht auch nutzen. Trotzdem fällt mir keine wirkliche Lösung ein.
Vor dem Absenden (und nicht nach jeder Eingabe) kann die Eingabe mit JS geprüft werden. Die Bedingungen lassen sich in vielen Fällen (Min- und Maxwerte, Pflichtfelder und Patterns) aus den Attributen der Eingabefelder rekonstruieren. Um eine serverseitige Prüfung kommt der OP sowieso nicht herum.
Tschö, Auge
Hallo T-Rex,
ein Browser und vor allem seine Entwicklerwerkzeuge sind ein Spielplatz für Trolle und Kriminelle aller Art. Einige posten gelegentlich auch in Foren 😉
Heißt: selbst wenn es keine Bugs gäbe, kann Dir ein böser User falsche Eingaben POSTen. Entweder über Scripting, oder ganz einfach mit den Entwicklerwerkzeugen die entsprechenden Attribute eliminieren.
Ideal wäre eine Lösung via html.
Es gibt sie nicht. Du kommst keinesfalls darum herum, alle Eingaben am Server zu validieren. Der Browser kann als Vorstufe dienen, um eine direktere Interaktion bereitzustellen und den Server von Plausis zu entlasten. Aber Eingabefehler zuverlässig abfangen kann nur der Server.
Rolf
Moin RolfB und alle anderen,
mir ist das Problem der Serverseitigen Validierung natürlich voll bewusst. Soll hier aber keinen Raum einnehmen. Ich hatte gehofft das man das besagte Problem durch irgendeinen "Hack" umgehen kann.
Ein ähnliches Beispiel stellen css Transitions im Chrome dar. Es gibt Scenarien, da werden die css Transitions beim laden der Seiten direkt abgefeuert obwohl sie es nicht dürften. Lösung war ein <script> </script> (wichtig ist das Leerzeichen dazwischen)ans Body Ende zu stellen. Als ich das las wollte ich es erst nicht glauben, aber es funktioniert wirklich. Dachte sowas gäbe es auch für mein Problem.
Gruß der Anti-Troll-Rex
Tach!
Dachte sowas gäbe es auch für mein Problem.
Ist das Problem denn auch wirklich eins? In welchen Fällen können zu kurze oder zu lange Einträge in die Liste gelangen? Schafft es ein normaler Besucher der Seite, der die Eingabefelder ohne min-/maxlength nie vorgesetzt bekam, solche ungültigen Werte in die Liste zu bekommen? Wenn das keine für den Anwendungsfall relevanten Szenarien sind, würde ich das Problem ignorieren und es der serverseitigen Validierung überlassen.
dedlfix.