Sécuriser les formulaires
15 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
les deux choses principales à vérifier sont :
la présence ou non de " et ', et ajouter des \ devant.
fonction pour cela : addslashes
la présence ou non de balises html, et l'affichage de celles-ci comme du texte
fonction : htmlentities
donc :
la présence ou non de " et ', et ajouter des \ devant.
fonction pour cela : addslashes
la présence ou non de balises html, et l'affichage de celles-ci comme du texte
fonction : htmlentities
donc :
- Code: Tout sélectionner
$text = addaslashes(htmlentities($text));
La question de la sécurité des formulaire est un vaste sujet et dépend fortement de ce que tu veux faire de tes données.
1) insertion dans une base de données, il faut se protéger des injections SQL:
- si le champs est un entier ou un flottant on transtype avec (int) ou (float)
- si c'est un champs texte, on s'assure qu'il ne contient que des caratères autorisés ( ex: un code postal français a une longueur de 5 caractères et ne doit comporter que des chiffres )
- on passe toutes les variables de type texte à la fonction mysql_real_escape_string si on utilise MySQL ou l'équivalent pour un autre SGBD, proscrire addslashes qui n'échappe que ' et ce n'est pas suffisant
2) afficher les données, il faut se protéger du cross site scripting, on utilise mb_convert_encoding( $str, "HTML_ENTITIES", "auto" ); avant l'affichage car la fonction htmlentities ne protège pas du XSS UTF-7 ou alors utiliser une fonction qui supprime les tag HTML non désirés
3) Envoyer par mail, il faut se protéger de l'injection d'en-têtes:
il faut filtrer les champs pour qu'ils ne contiennent rien de ce qui suit:
"\r","\n","%0ad", "%0AD","%0d","%0D","Content-Type:","bcc:","to:","cc:"
C'est le minimum, on pourrait rédiger un bouquin sur les failles les plus courantes.
1) insertion dans une base de données, il faut se protéger des injections SQL:
- si le champs est un entier ou un flottant on transtype avec (int) ou (float)
- si c'est un champs texte, on s'assure qu'il ne contient que des caratères autorisés ( ex: un code postal français a une longueur de 5 caractères et ne doit comporter que des chiffres )
- on passe toutes les variables de type texte à la fonction mysql_real_escape_string si on utilise MySQL ou l'équivalent pour un autre SGBD, proscrire addslashes qui n'échappe que ' et ce n'est pas suffisant
2) afficher les données, il faut se protéger du cross site scripting, on utilise mb_convert_encoding( $str, "HTML_ENTITIES", "auto" ); avant l'affichage car la fonction htmlentities ne protège pas du XSS UTF-7 ou alors utiliser une fonction qui supprime les tag HTML non désirés
3) Envoyer par mail, il faut se protéger de l'injection d'en-têtes:
il faut filtrer les champs pour qu'ils ne contiennent rien de ce qui suit:
"\r","\n","%0ad", "%0AD","%0d","%0D","Content-Type:","bcc:","to:","cc:"
C'est le minimum, on pourrait rédiger un bouquin sur les failles les plus courantes.
merci pour ses infos.
Pour l'insertion dans une base Mysql, il faut utiliser sprinf pour formater les variable dans une string SQL comme ceci :
$sql = sprinf("INSERT INTO toto values (".mysql_real_escape_string($_POST['variable']).")", %s);
$req = mysql_query($sql, $db);
Pour l'insertion dans une base Mysql, il faut utiliser sprinf pour formater les variable dans une string SQL comme ceci :
$sql = sprinf("INSERT INTO toto values (".mysql_real_escape_string($_POST['variable']).")", %s);
$req = mysql_query($sql, $db);
link182 a écrit:Pour l'insertion dans une base Mysql, il faut utiliser sprinf pour formater les variable dans une string SQL comme ceci :
$sql = sprinf("INSERT INTO toto values (".mysql_real_escape_string($_POST['variable']).")", %s);
$req = mysql_query($sql, $db);
C'est une bonne idée, mais ça ne dispense pas de faire les tests avant et d'interrompre le programme si une variable ne correspond pas à ce qu'on attend.
Une requête comme celle-ci est encore plus dangeureuse avec sprintf que sans.
- Code: Tout sélectionner
$sql = "UPDATE matable SET flag='%s' WHERE champs=%d";
Si la variable allant à la place de champs contient 'ee', on se retrouve avec une requête:
- Code: Tout sélectionner
UPADTE matable SET flag='un flag' WHERE champs=0
Et hop, on met à jour tous les enregistrements dont champs=0, ce n'était pas vraiment prévu.
.
- Code: Tout sélectionner
$titre = mysql_real_escape_string($_POST['titre']);
Ca fonctionne ca si on a déjà ouvert la connexion au serveur sql?
zimounet a écrit:
- Code: Tout sélectionner
$titre = mysql_real_escape_string($_POST['titre']);
Ca fonctionne ca si on a déjà ouvert la connexion au serveur sql?
il faut même que la connexion soit ouverte pour que ça fonctionne sinon elle tente d'en ouvrir une avec les paramètres pardéfaut du php.ini
Attention car ça ne protège que des injections SQL sur des champs texte, ça ne protège pas de l'injection sur des entiers ni des autres failles de type XSS ou CSRF.
- vachomatic
- Nouveau WRInaute
- Messages: 7
- Inscription: Dim Mai 06, 2007 19:22
précision
Bonjour à tous,
Petite rectification sur une faute de frappe dans la contribution de kazhar, pour les formulaire PHP sans SQL :
$text = addslashes(htmlentities($text));
A+ Vachomatic
Petite rectification sur une faute de frappe dans la contribution de kazhar, pour les formulaire PHP sans SQL :
$text = addslashes(htmlentities($text));
A+ Vachomatic
15 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Sécuriser WordPress et IPB
- sécuriser un serveur postfix ?
- sécuriser un site au minimum
- Comment sécuriser le wifi ?
- Sécuriser un hébergement dédié ?
- Sécuriser l'acces à mysql
- Sécuriser son site Internet
- Sécuriser un champ textaera (TinyMCE)
- securiser un formulaire avec mot a retaper
- Sécuriser et protéger son site web
- Hack, massmailing, ralentissement : comment sécuriser?
- [article] Sécuriser son serveur LAMP
- Sécuriser serveur contre l'url rewriting
- Recherche à sécuriser des pdf
- Sécuriser son serveur dédié ?
Consultez la description détaillée des produits ou services de Google suivants : Google Secure Access
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité







le forum