Integer-Datenbankeingabe bereinigen

7

Ich habe eine Anwendung, die Daten über eine POST-Anfrage aufnimmt. Ich verwende diese Daten, um eine neue Zeile in die Datenbank einzufügen. Ich weiß, dass die Verwendung von mysql_real_escape_string() (plus das Entfernen von% und _) der richtige Weg für Strings ist, aber was ist mit Integer-Werten? Im Moment benutze ich die PHP-Funktion intval() .

Ich wollte jedoch sicherstellen, dass intval() absolut sicher ist. Ich kann keine Möglichkeit sehen, wie ein Angreifer einen SQL-Injection-Angriff durchführt, wenn die Variablen intval() zuerst durchlaufen (da immer eine Ganzzahl zurückgegeben wird), aber ich wollte sicherstellen, dass dies bei Personen mit mehr Erfahrung der Fall ist als ich.

Danke.

    
Dan D. 08.07.2010, 21:16
quelle

4 Antworten

21

Ja, intval() ist sicher. Es gibt absolut keine Möglichkeit, eine SQL-Injektion durchzuführen, wenn der Parameter in Integer konvertiert wird, weil (offensichtlich) das Format einer Ganzzahl es nicht erlaubt, SQL-Schlüsselwörter (oder Anführungszeichen oder was auch immer) in sie einzufügen.

    
Etienne Dechamps 08.07.2010, 21:20
quelle
4

Der einfachste Weg, die SQL-Injektion zu verhindern, besteht darin, immer vorbereitete Statements zu verwenden. Verwenden Sie die mysqli-Bibliotheken oder besser noch ein ORM wie Doktrin usw.

Ihre Abfragen werden dann zu etwas wie:

%Vor%     
Byron Whitlock 08.07.2010 21:22
quelle
2

Ich mache das immer

%Vor%

um sicherzustellen, dass $ var unter allen Umständen als Integer behandelt wird, und schauen Sie nie wieder auf $ _POST ['var']. Beim Betrachten des Handbuchs tut intval () genau dasselbe.

Was auch immer Sie tun, in Subsequenz $ var wird eine tatsächliche Ganzzahl sein, die ziemlich sicher zu handhaben ist.

    
mvds 08.07.2010 21:23
quelle
2

Vorbereitete Anweisung ist der beste Weg, um SQL-Injektion zu behandeln. oder benutze PDO Andernfalls ist intval besser als is_numeric

    
Developer 08.07.2010 21:24
quelle

Tags und Links