Désinfection des paramètres utilisateur MySQL
-
04-07-2019 - |
Question
Quels sont les caractères dangereux qui doivent être remplacés dans la saisie utilisateur lorsque la saisie de l'utilisateur sera insérée dans une requête MySQL? Je connais les guillemets, les guillemets doubles, \ r et \ n. Y a-t-il d'autres?
(Je n'ai pas l'option d'utiliser un connecteur intelligent qui accepte les paramètres. Je dois donc créer la requête moi-même. Cette requête sera implémentée dans plusieurs langages de programmation, y compris des langages obscurs, de sorte que des solutions tels que mysql_real_escape_string
en PHP ne sont pas valides)
La solution
mysql_real_escape_string () depuis mysql.com docs:
La chaîne à partir de est codée en une chaîne SQL échappée, en tenant compte du jeu de caractères actuel de la connexion. Le résultat est placé dans et un octet nul final est ajouté. Les caractères encodés sont NUL (ASCII 0), «\ n», «\ r», «\», «'», «« »» et Control-Z (voir Section 8.1, «Valeurs littérales»). (À proprement parler, MySQL exige uniquement que la barre oblique inverse et le caractère de citation utilisé pour citer la chaîne dans la requête soient échappés. Cette fonction cite les autres caractères pour faciliter leur lecture dans les fichiers journaux.)
mysql_real_escape_string () prend en charge les jeux de caractères. La réplication de toutes ses capacités (en particulier contre les problèmes d'attaque à plusieurs octets) n'est cependant pas une mince tâche.
De http://cognifty.com/blog.entry/id= 6 / includeslashes_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
Autres conseils
Quelles langues devez-vous prendre en charge? Il est bien préférable d’utiliser la désinfection intégrée à une langue plutôt que d’écrire la vôtre.
Modifier: en regardant mysql_real_escape_string
sur php.net:
mysql_real_escape_string ()
appelle la fonction de bibliothèque de MySQLmysql_real_escape_string
, qui ajoute des barres obliques inverses aux caractères suivants:\ x00
,\ n> / code>,
\ r
,\
,'
,"
" et\ x1a
.