Hygienisierung MySQL Anwenderparameter
-
04-07-2019 - |
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)
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-Bibliotheksfunktionmysql_real_escape_string
, die Schrägstriche auf die folgenden Zeichen prepends.\x00
,\n
,\r
,\
,'
,"
und\x1a