SUIVI D'UNE PANNE

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 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.

https://codes-sources.commentcamarche.net/source/55215-suivi-d-une-panne

Pouvez - vous mettre à disposition le fichier permettant de générer la base ? Merci
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és 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Derniè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és 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
12 juin 2013 à 21:36
Bonsoir

la table sql est absente du zip ?

merci ++
Rejoignez-nous