|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() ![]() Inscription : décembre 2009 Messages : 21 ![]() |
Bonsoir à tous,
je vous explique mon problème: je dois créer une application web pour gérer des stages pour une association. L'architecture html est faite, il me reste 'simplement' à ajouter du code php là-dessus. J'y arrive à peu près, qu'il s'agisse d'interroger la base ou de modifier certains champs. On m'a dit qu'il fallait _absolument_ protéger les champs texte des insertions SQL. Je ne vois pas tellement qui serait intéressé par ma base de données, mais sur de l'expérience des internautes, je vous fais confiance. C'est à ce moment que ça coince: je peux modifier/interroger la base sans problème si les champs ne contiennent que du texte, mais si j'ajoute le caractère " (double quote), la saisie saute! Ceci, sans faire appel à une fonction de protection SQL. Ce qui m'ennuie, c'est que les utilisateurs doivent pouvoir utiliser les double quotes et autres caractères exotiques dans leur saisie (il n'est pas imaginable de leur dire qu'ils ne peuvent pas utiliser tel ou tel caractère). Voici un bout du code: - la récupération des infos saisies sur la page précédente: Code :
Code :
Code :
T. |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
L’échappement des chaînes de caractères sert effectivement a empêcher les injections sql mais aussi a échapper les guillemets normaux de la chaîne.
avec l'extension mysql_ on utilise la fonction mysql_real_escape_string() |
|
|
00
|
|
|
#3 | |
|
Membre habitué
![]() ![]() Inscription : décembre 2009 Messages : 21 ![]() |
Citation:
Cependant j'avais essayé d'utiliser la fonction mysql_real_escape_string(), qui n'a pas résolu mon problème: si $departement vaut : Unité "bidule", le texte bidule disparaît avec les double quotes... |
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
normale non ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() ![]() Inscription : décembre 2009 Messages : 21 ![]() |
Ben justement, il me semble que oui, mais je voudrais pouvoir les garder - ou les remplacer - pour que rien de la saisie ne saute (sans toutefois risquer une insertion malintentionnée). Et que si un utilisateur précise qu'il s'agit du département "Bidule", l'interrogation de la base (dans une autre page) me précise qu'il s'agit bien du département "Bidule". Sachant que les doubles quote m'importent peu.
Peut-être que ce n'est pas possible? Je suis plutôt sur le versant débutant, alors je rame un peu... |
|
|
00
|
|
|
#6 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
Est-ce que c'est bien a l'insertion que le texte est tronqué ?
Si tu essaies d'inserer une chaine avec les mauvais guillemets, ta requete ne fonctionnera pas, donc rien ne sera insérer ; il faut utiliser une fonction comme myslq_real_escape_string(). Si tu essaies d'afficher une chaine avec les mauvais guillemets dans un input, le texte sera tronqué au guillemet fautif ; il faut utiliser une fonction comme htmlentities. |
|
|
00
|
|
|
#7 |
|
Membre éprouvé
![]() Guillaume Développeur Web Inscription : décembre 2007 Messages : 353 ![]() |
Utilisons les bons termes... On t'as demandé d'éviter "l'injection" SQL (et non l'insertion). (juste pour petite correction ^^)
Je pense que le plus simple à faire est de passer toute ta chaine ($_POST['text_utilisateur']) dans htmlentities (qui convertira tous les caractères spéciaux en caractères HTMl)
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi. - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() ![]() Inscription : décembre 2009 Messages : 21 ![]() |
Merci! En effet je n'ai pas vérifié cela. Je regarde ça ce soir et je te donne des nouvelles.
Citation:
Citation:
Je vérifie la base après l'insertion et je vous dit ce qui se passe avec l'utilisation des deux fonctions que vous m'avez proposées. Merci en tout cas pour les tuyaux! |
||
|
|
00
|
|
|
#9 | ||||
|
Membre éprouvé
![]() Guillaume Développeur Web Inscription : décembre 2007 Messages : 353 ![]() |
lors de l'ajout du texte dans la base de données:
Code :
Code :
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi. - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
|
||||
|
00
|
|
|
#10 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
Ca serait absurde de mettre des entités HTML dans la base de donnée et de les retirer quand on est dans la page HTML.
La bonne méthode est : Code :
mysql_query('INSERT INTO table VALUES("'.mysql_real_escape_string($_POST['texte']).'")'); |
|
|
00
|
|
|
#11 | ||
|
Membre habitué
![]() ![]() Inscription : décembre 2009 Messages : 21 ![]() |
Bon alors j'ai essayé plusieurs techniques...
Une seule fonctionne: addslashes() En gros, je modifie le code comme ça: Code :
Par contre, si je mets "toto" la valeur est vide. Les autres modifications de la base sont cependant enregistrées. Si je change pour mysql_real_escape_string(ucwords($_POST['resp_prenom']),$Connexion);, avec 'toto' tout fonctionne mais il ne prend pas les double quote , comme avec addslashes. J'en conclus qu'il y a un problème avec les double quote, non? Seul problème, je n'arrive pas à les remplacer avec str_replace() ... Pouvez-vous m'expliquer? |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com