Frage

Was sind die gefährlichen Zeichen, die in Benutzereingaben ersetzt werden sollen, wenn die Eingabe des Benutzers wird in einer MySQL-Abfrage eingefügt werden? Ich weiß, über doppelte Anführungszeichen, \ r \ n. Gibt es andere?
(Ich habe die Option nicht ein Smart-Anschluss zu verwenden, die Parameter akzeptiert, damit ich die Abfrage selbst bauen und dies wird in mehreren Programmiersprachen implementiert werden, darunter auch einige obskuren so Lösungen wie mysql_real_escape_string in PHP sind nicht gültig)

War es hilfreich?

Lösung

mysql_real_escape_string () von mysql.com docs:

  

Die Zeichenfolge in aus ist mit einer entkam SQL-Zeichenfolge codiert werden, unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung. Das Ergebnis wird in platziert und an einem Abschluss null Byte angehängt. Zeichen codiert sind NUL (ASCII 0), „\ n“, „\ r“, „\“, „"“,„"“, and Control-Z (siehe Abschnitt 8.1, ‚Literal Values‘). (Streng genommen, MySQL erfordert nur, dass Backslash und die Anführungszeichen verwendet, um die Zeichenfolge in der Abfrage zu zitieren entwertet werden. mit dieser Funktion der anderen Charaktere zitieren sie leichter zu machen in Log-Dateien zu lesen.)


mysql_real_escape_string () ist Zeichensatz bekannt ist, so replizieren, alle ihre Fähigkeiten (vor allem gegen Multi-Byte-Angriff Probleme) ist nicht eine kleine Menge an Arbeit.

http://cognifty.com/blog.entry/id= 6 / addslashes_dont_call_it_a_comeback.html :

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Feature                                         AS     MRES    ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

Andere Tipps

Welche Sprache brauchen Sie zu unterstützen? Es ist viel besser, eine Sprache eingebautes in sanitization zu verwenden als die eigenen zu schreiben.

Edit: Ein Blick auf mysql_real_escape_string auf php.net:

  

mysql_real_escape_string() ruft MySQL-Bibliotheksfunktion mysql_real_escape_string, die Schrägstriche auf die folgenden Zeichen prepends. \x00, \n, \r, \, ', " und \x1a

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top