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)

Était-ce utile?

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 MySQL mysql_real_escape_string , qui ajoute des barres obliques inverses aux caractères suivants: \ x00 , \ n> / code>, \ r , \ , ', "" et \ x1a .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top