[PhP-SQL]Sécuriser les variables utilisateurs
Résolu/Fermé
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
-
Modifié par Exileur le 5/11/2011 à 13:15
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 8 nov. 2011 à 15:51
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 8 nov. 2011 à 15:51
A voir également:
- [PhP-SQL]Sécuriser les variables utilisateurs
- Easy php - Télécharger - Divers Web & Internet
- Php natif - Forum PHP
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
- Gestion des utilisateurs windows 10 - Guide
- Logiciel sql - Télécharger - Bases de données
2 réponses
Bonjour
1- récupération des données
Il faut utiliser stripslashes pour récupérer les variables reçues par $GET, $POST ou $COOKIES si la fonction get_magic_quotes-gpc() rend 1.
En effet, si elle rend 1, ça signifie que le serveur est configuré pour ajouter des slashes devant les apostrophes : dans ce cas et dans ce cas seulement, il FAUT utiliser stripslashes.
2 - enregistrement dans mysql
Il faut utiliser mysql_real_escape_string pour enregistrer les données dans une base de données mysql si les données peuvent contenir des caractères spéciaux (signes de ponctuation, lettres accentuées, données binaires...). C'est inutile (mais sans danger) de le faire si les données ne contiennent de manière certaine que des caractères alphanumériques (non accentués). Par exemple, la fonction MD5 rendant une chaîne constituée uniquement des chiffres 0 à 9 et des lettres a à f, faire mysql_real_escape_string(MD5($password)) comme on voit souvent est inutile: MD5($password) suffit.
Je n'ai jamais, jamais eu besoin de addslashes, qui joue un rôle voisin (mais pas exactement équivalent) à mysql_real_escape_string
3 - affichage
Les fonctions htmlentities et htmlspecialchars ne devraient intervenir qu'au moment d'afficher les données. Personnellement je n'utilise que htmlspecialchars qui ne transforme qu' un minimum de caractères.
Ceci est mon point de vue sur l'utilisation de ces fonctions. Mais chacun a le droit de les utiliser comme il veut. Par exemple, on voit souvent des scripts avec mysql_real_escape_string(htmlentities(stripslashes($variable))). Je crois que ce genre d'empilement de fonctions tient plus de la méthode "dans le doute, ceinture + bretelles" que de la bonne connaissance de leurs rôles.
1- récupération des données
Il faut utiliser stripslashes pour récupérer les variables reçues par $GET, $POST ou $COOKIES si la fonction get_magic_quotes-gpc() rend 1.
En effet, si elle rend 1, ça signifie que le serveur est configuré pour ajouter des slashes devant les apostrophes : dans ce cas et dans ce cas seulement, il FAUT utiliser stripslashes.
2 - enregistrement dans mysql
Il faut utiliser mysql_real_escape_string pour enregistrer les données dans une base de données mysql si les données peuvent contenir des caractères spéciaux (signes de ponctuation, lettres accentuées, données binaires...). C'est inutile (mais sans danger) de le faire si les données ne contiennent de manière certaine que des caractères alphanumériques (non accentués). Par exemple, la fonction MD5 rendant une chaîne constituée uniquement des chiffres 0 à 9 et des lettres a à f, faire mysql_real_escape_string(MD5($password)) comme on voit souvent est inutile: MD5($password) suffit.
Je n'ai jamais, jamais eu besoin de addslashes, qui joue un rôle voisin (mais pas exactement équivalent) à mysql_real_escape_string
3 - affichage
Les fonctions htmlentities et htmlspecialchars ne devraient intervenir qu'au moment d'afficher les données. Personnellement je n'utilise que htmlspecialchars qui ne transforme qu' un minimum de caractères.
Ceci est mon point de vue sur l'utilisation de ces fonctions. Mais chacun a le droit de les utiliser comme il veut. Par exemple, on voit souvent des scripts avec mysql_real_escape_string(htmlentities(stripslashes($variable))). Je crois que ce genre d'empilement de fonctions tient plus de la méthode "dans le doute, ceinture + bretelles" que de la bonne connaissance de leurs rôles.
if(get_magic_quotes_gpc()) { $username=mysql_real_escape_string(stripslashes($_POST['username'])); $password = MD5(stripslashes($_POST['password'])); } else { $username = mysql_real_escape_string($_POST['username']); $password = MD5($_POST['password']); }ok pour le principe, mâme si c'est loin d'être optimal. Personellement, je crée uen fonction Recupgpc :
function Recupgpc($chaine) { if(get_magic_quotes_gpc()) return stripslashes($chaine); return $chaine; } $username = Recupgpc($_POST['username']); $password = Recupgpc($_POST['password']); // test de validité de $username et $password // requête sql avec mysql_real_escape_string($username) et MD5($password)
Note qu'il faut vérifier que le login et le password respectent un minimum de règles (longueurs minimale et maximale par exemple, nom "qui ressemble à un nom") AVANT de les insérer dans la base de données.
C'est pour ça que je n'applique pas mysql_real_escape_string et MD5 dès la réception des données mais juste au moment de la requête d'insertion. Pour la vérification, ça n'a pas d'importance car on ne va pas trouver les mots bizarres dans la base s'ils ont été rejetés à l'insertion.
htmlspecialchars reste indispensable lors de l'affichage. Pas vraiment en fait, mais si tu ne comprends pas tout à la lecture de la page de manuel sur cette fonction, utilise-la pour les echo. Rien n'interdit de l'utiliser dès la récupération des données comme tu le proposes, c'est simplement un détournement de la fonction. Ça ne te dispense ni du stripslahes (quand il est utile) ni du mysql_real_escape_string
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
6 nov. 2011 à 00:32
6 nov. 2011 à 00:32
Ok, merci beaucoup pour toutes ces infos et de m'avoir permis d'éclaircir tous ça.
Cordialement
Exileur
Cordialement
Exileur
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
6 nov. 2011 à 18:38
6 nov. 2011 à 18:38
Coucou,
Je vais te poser une petite question, qui n'a aucun rapport avec le post, qu'elle est l'utilité de la balise <minicode></minicode>, malgré mes recherches, je n'ai rien trouver de concluant.
Merci
Je vais te poser une petite question, qui n'a aucun rapport avec le post, qu'elle est l'utilité de la balise <minicode></minicode>, malgré mes recherches, je n'ai rien trouver de concluant.
Merci
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
7 nov. 2011 à 09:39
7 nov. 2011 à 09:39
Ok merci.
J'ai trouvé plus ou moins une explication ici :
http://www.siteduzero.com/forum-83-316948-p1-suggestion-minicode-et-php.html
En gros, la balise pemettrait de collorer du code..
J'ai trouvé plus ou moins une explication ici :
http://www.siteduzero.com/forum-83-316948-p1-suggestion-minicode-et-php.html
En gros, la balise pemettrait de collorer du code..
Après une petite recherche...
Cette balise est propre au site du zéro. Elle ne fera absolument rien (sauf peut-être des erreurs) si tu essayes de l'utiliser dans tes pages
Voir http://www.siteduzero.com/tutoriel-3-37291-bien-utiliser-le-zcode.html
N'oublie jamais : les bonnes informations ne sont que sur les sites de référence. Tout ce que tu trouves dans les forums et les sites de vulgarisation peut être très utile, mais doit être examiné d'un oeil critique avant d'être accepté.
Cette balise est propre au site du zéro. Elle ne fera absolument rien (sauf peut-être des erreurs) si tu essayes de l'utiliser dans tes pages
Voir http://www.siteduzero.com/tutoriel-3-37291-bien-utiliser-le-zcode.html
N'oublie jamais : les bonnes informations ne sont que sur les sites de référence. Tout ce que tu trouves dans les forums et les sites de vulgarisation peut être très utile, mais doit être examiné d'un oeil critique avant d'être accepté.
5 nov. 2011 à 21:06
Donc, pour l'envoi d'information type Login/Password dans une BDD, il faudrait procéder comme ceci ?
if(get_magic_quotes_gpc())
{
$username=mysql_real_escape_string(stripslashes($_POST['username']));
$password = MD5(stripslashes($_POST['password']));
}
else
{
$username = mysql_real_escape_string($_POST['username']);
$password = MD5($_POST['password']);
}
Sauf si un preg_match ou un RegExp vérifies qu'aucun caractère spéciaux n'est présent , il suffirait alors de :
$username = mysql_real_escape_string($_POST['username']);
$password = MD5($_POST['password']);
Quand je récupère les logins/passwords par la suite dans la BDD, htmlspecialchars est-il nécessaire lorsque je l'affiche ?
Ou c'est une fonction qui serait seulement utile par exemple lors de la validation de l'inscription ? genre :
$user = htmlspecialchars ($_POST['username']);
echo 'Bienvenue'.$user;
echo 'Votre inscription est validée';
Merci de prendre le temps de m'expliquer
Cordialement
Exileur