Sécurité dans les formulaires - PHP - Programmation
Marsh Posté le 28-10-2007 à 19:25:27
Bonsoir!
Pour tout ce qui concerne la protection de données à stocker dans une BDD, il est fortement conseillé d'utiliser la fonction mysql_real_escape_string, qui permet surtout de te protéger de certaines injections SQL!
Voir les caractéristiques de celle-ci sur http://php.net
Marsh Posté le 28-10-2007 à 19:33:18
j'ai vu ça sur le site du zero (http://www.siteduzero.com/tuto-3-146-1-tp-un-mini-chat.html#ss_part_1)
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
donc , on peut les cumuler ...
Marsh Posté le 28-10-2007 à 19:39:21
Pourquoi liez vous mysql_real_escape_string et htmlspecialchars ?
Le premier sert a envoyer une requête sécurisé au serveur (même s'il faut quand même faire des opérations supplémentaires parfois)
Le second sert a ce que le navigateur client interprète l'ensemble de la donnée a afficher comme du texte et non du code HTML (= pas de risque de XSS)
Marsh Posté le 28-10-2007 à 20:32:04
zugolin a écrit : j'ai vu ça sur le site du zero (http://www.siteduzero.com/tuto-3-146-1-tp-un-mini-chat.html#ss_part_1) |
oui , mais ca ne sert a rien
Marsh Posté le 28-10-2007 à 20:40:28
J'utilise donc cette fonction mysql_real_escape_string pour faire mes insert et update ?
et htmlspecialchars pour mes echo ?
Marsh Posté le 02-11-2007 à 18:12:59
Je viens d'essayer de mettre cette commande mysql_real_escape_string dans mon update et ça ne fonctionne pas. Dois-t'on vraiment l'utiliser dans le update ou insert ?
$reponse = mysql_query("UPDATE ATS_membre set employeur=mysql_real_escape_string('$employeur'),e_courriel='$e_courriel',t_trav='$e_tel',commandite='$commandite',maj_iden=now() where id=$id" );
Marsh Posté le 02-11-2007 à 18:20:17
La tu envoies la requetes suivante a ton serveur :
UPDATE ATS_membre set employeur=mysql_real_escape_string('$employeur'),e_courriel='$e_courriel',t_trav='$e_tel',commandite='$commandite',maj_iden=now() where id=$id"
Ta commande mysql_real_escape_string, n'est PAS interprétée comme une commande mais comme une partie intégrante de la requête. Pour exécuter la commande :
$reponse = mysql_query("UPDATE ATS_membre set employeur=".mysql_real_escape_string($employeur).",e_courriel='$e_courriel',t_trav='$e_tel',commandite='$commandite',maj_iden=now() where id=$id" );
Je rajoute qu'en mettant les guillemets autour de la variable que tu veux escaper, tu demandes a PHP d'échapper non pas le contenu de ta variable mais la chaine '$employeur'
Marsh Posté le 02-11-2007 à 20:21:40
L'objectif est de transférer dans ma table les données de façon sécurisée.
Marsh Posté le 03-11-2007 à 00:19:14
ReplyMarsh Posté le 03-11-2007 à 00:53:20
Je veux enregistrer dans la table avec des valeurs sures.
Pour ce qui est de mes requêtes, elles utilisent un no qui est mis à jour que par moi.
Marsh Posté le 03-11-2007 à 10:11:26
les valeurs sûres, tu peux les caster via PHP, par exemple $age = intval($_POST['age']) ou encore $age = abs(sprintf("%d", $_POST['age'])) : ainsi tu es sûr que $age est un entier positif ou nul.
Tu peux aussi fare un peu de sécurité dans l'HTML, j'entends par là que si le visiteur doit donner une note par exemple (en chiffre) préfère un menu <select> à un input type="text". Pareil pour les dates, au lieu de demander à rentrer JJ-MM-AAAA, préfère 3 menus déroulants ... Ainsi tes sûr de ce que tu récupères en PHP, ça te fait ça de moins à traiter.
Marsh Posté le 03-11-2007 à 12:03:27
pas du tout. rien n'empêche le visiteur de modifier le HTML de la page, il suffit juste d'enregistrer la page en local et de l'afficher avec les modifs. principe de précaution: tu controle TOUT ce qui vient de l'utilisateur.
Marsh Posté le 03-11-2007 à 12:12:26
NewsletTux > -1 !
Personne pour proposer l'utilisation de PDO? Rien ne dit que l'utilisation de vieilleries comme mysql_real_escape_string est indispensable (c'est pt-être le cas, mais rien ne l'indique ici).
Marsh Posté le 03-11-2007 à 12:27:23
sircam a écrit : NewsletTux > -1 ! |
leflos5 a écrit : Tu veux pas filtrer correctement toi même et utiliser les requêtes préparées? |
Marsh Posté le 03-11-2007 à 15:36:36
Spa assez explicite
Marsh Posté le 28-10-2007 à 18:59:53
Bonjour,
J'essaie de mieux comprendre la sécurité dans les formulaires et j'aimerais savoir si je dois utiliser mysql_real_escape_string() ou htmlspecialchars.
Merci!