Wir alle wissen, dass parametrisiertes SQL der Weg ist, wenn es um Benutzereingaben und dynamisches SQL geht, aber von String zu int (oder doppelt oder lang oder was auch immer) als effektiv gilt, wenn die gesuchte Eingabe numerisch ist ?
Ich denke, was ich frage ist, ob diese Technik allein in Bezug auf die SQL-Injektion unfehlbar ist?
Ich bin kein Experte, aber ich bin mir ziemlich sicher, dass das sicher wäre.
Aber warum die Chance nutzen? Verwenden Sie parametrisiertes SQL, und Sie müssen sich nie darum kümmern.
Außerdem hat die Parametrierung Ihres SQL andere Vorteile, nicht nur den Schutz vor Injektionen.
Wenn die Zeichenfolge eine gültige Zahl war, bevor Sie sie in eine Ganzzahl umgewandelt haben, ist dies sicher. Aber Sie müssen sicherstellen, dass es eine gültige Ganzzahl ist, bevor Sie es in int umwandeln.
Ich weiß nicht, welche serverseitige Sprache Sie verwenden, aber in PHP können Sie die Funktion is_numeric () verwenden. Zum Beispiel:
%Vor%Es ist sicher in Bezug auf sql Injektionsprävention, aber nicht wirklich eine gute Idee, da Sie eine Ausnahme erhalten, die Sie immer möglichst vermeiden wollen, da Ausnahmen teuer sind. Sie sollten die Eingabe wirklich sauber machen. Und natürlich kann der Benutzer den Wert in jedem Bereich innerhalb eines int32-Wertes ändern.
Wahrscheinlich , aber es lohnt sich zu testen.
In Bezug auf Richards Antwort hatte ich manchmal Probleme damit, dass IsNumeric () etwas liberaler ist als das, was es als gültige Zahl akzeptieren wird, von der tatsächlichen CAST zu numerisch (hängt von den Lokalisierungseinstellungen ab). Sachen wie "-0", "3E-5", "5.000.000" erfüllen manchmal IsNumeric, aber werfen nicht richtig. Also mache ich normalerweise einen vollständigen Versuch, um die tatsächliche Darstelleranweisung stattdessen zu fangen.
Tags und Links sql-injection