cod57
Messages postés1653Date d'inscriptiondimanche 7 septembre 2008StatutMembreDernière intervention11 septembre 2013
-
12 juin 2013 à 21:36
sfavreau -
18 juin 2013 à 10:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Oui en effet la table sql n'est pas présente, pouvez - vous la mettre à disposition afin de pouvoir faire des tests ? Sur le principe, l'idée de départ est intéressante. Il est vrai que l'utilisation de PDO serait peut être intéressante afin de consolider le code utilisé. Merci en tout cas pour cette source.
cs_emilia123
Messages postés122Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 5 janvier 2009 17 juin 2013 à 08:28
Bonjour,
Il faut faire très attention parcequ'il y a des problèmes de sécurité avec ton code PHP.
A) problèmes au niveau SQL :
mysql_query("SELECT * FROM depannage WHERE nom = '".$_POST['nom']."'......");
Si $_POST['nom']= "' or 1=1# ";
Cela donnerait :
SELECT * FROM depannage WHERE nom = '' or 1=1# ....
alors la requête SQL devrait remonter l'ensemble des résultats de la base.
Il ne faut JAMAIS utiliser une variable utilisateur directement dans une requête SQL. Cela donne à l'internaute un accès direct à la base de donnée, et la possibilité de lancer les requêtes SQL qu'il désire (vider des tables, modifier des enregistrements, etc). Il y a plusieurs possibilités de correction :
1) passer chaque variable par une fonction de sécurisation comme "mysql_escape_string" (si c'est du texte) ou intval si c'est un numérique,
2) (solution recommandée) utiliser l'api mysqli au lieu de mysql et du coup utiliser les requêtes préparées (mysqli::prepare).
"mysql" est appelé à disparaitre au profit de "mysqli", y passer au plus tôt est une bonne chose.
B) problèmes au niveau HTML :
Tout comme il ne faut pas utiliser une variable utilisateur directement dans du code SQL, il ne faut pas non plus l'utiliser dans le code HTML directement.
ex: echo "Utilsateur :" .$_POST['nom']
si $_POST['nom']= "<script>alert(1);</script>" alors le javascript sera exécuté.
Il faut TOUJOURS ajouter un traitement à une variable utilisateur comme par exemple la fonction "htmlspecialchars" qui transforme les caractères spéciaux HTML en caractères lisibles (transforme < en < et > en > du coup le javascript ne peut être compris par le navigateur).
Si la variable attendue est un chiffre/nombre, un intval() fera une très bonne protection.
Bonne continuation
EM.
cod57
Messages postés1653Date d'inscriptiondimanche 7 septembre 2008StatutMembreDernière intervention11 septembre 201319 12 juin 2013 à 21:36
18 juin 2013 à 10:22
18 juin 2013 à 09:12
17 juin 2013 à 08:28
Il faut faire très attention parcequ'il y a des problèmes de sécurité avec ton code PHP.
A) problèmes au niveau SQL :
mysql_query("SELECT * FROM depannage WHERE nom = '".$_POST['nom']."'......");
Si $_POST['nom']= "' or 1=1# ";
Cela donnerait :
SELECT * FROM depannage WHERE nom = '' or 1=1# ....
alors la requête SQL devrait remonter l'ensemble des résultats de la base.
Il ne faut JAMAIS utiliser une variable utilisateur directement dans une requête SQL. Cela donne à l'internaute un accès direct à la base de donnée, et la possibilité de lancer les requêtes SQL qu'il désire (vider des tables, modifier des enregistrements, etc). Il y a plusieurs possibilités de correction :
1) passer chaque variable par une fonction de sécurisation comme "mysql_escape_string" (si c'est du texte) ou intval si c'est un numérique,
2) (solution recommandée) utiliser l'api mysqli au lieu de mysql et du coup utiliser les requêtes préparées (mysqli::prepare).
"mysql" est appelé à disparaitre au profit de "mysqli", y passer au plus tôt est une bonne chose.
B) problèmes au niveau HTML :
Tout comme il ne faut pas utiliser une variable utilisateur directement dans du code SQL, il ne faut pas non plus l'utiliser dans le code HTML directement.
ex: echo "Utilsateur :" .$_POST['nom']
si $_POST['nom']= "<script>alert(1);</script>" alors le javascript sera exécuté.
Il faut TOUJOURS ajouter un traitement à une variable utilisateur comme par exemple la fonction "htmlspecialchars" qui transforme les caractères spéciaux HTML en caractères lisibles (transforme < en < et > en > du coup le javascript ne peut être compris par le navigateur).
Si la variable attendue est un chiffre/nombre, un intval() fera une très bonne protection.
Bonne continuation
EM.
12 juin 2013 à 21:36
la table sql est absente du zip ?
merci ++