Académique Documents
Professionnel Documents
Culture Documents
Il est un domaine que l’on ne doit pas oublier lorsque l’on réalise des formulaires en PHP, c’est la sécurité. En
e et, les formulaires sont très souvent liés à une adresse mail ou à une base de données ; il est donc judicieux
de protéger ces éléments-clé d’un système d’information.
Loin d’être un guide absolu dans le domaine, cet article regroupera quelques bonnes pratiques pour
sécuriser un formulaire que j’ai glanées au l du web.
Il vous faudra donc choisir, au cas par cas, si les variables récupérées peuvent être a chées au visiteur dans l’URL, ou non. Notez que ce
n’est pas parce que les variables sont transmises en POST qu’elles sont totalement invisibles, chi rées ou sécurisées ; il reste possible de
les a cher (ou plutôt, de les intercepter) avec des outils.
https://www.benji1000.net/la-securite-des-formulaires-php/ 1/6
24/11/2017 La sécurité des formulaires PHP – Blog de benji1000
Dans le cas où le site que vous développez ne requiert pas que les utilisateurs aient un jour à saisir du code informatique dans leurs
messages, on peut utiliser la fonction strip_tags() a n de purement et simplement supprimer les balises de code HTML ou Javascript
des messages des utilisateurs.
htmlspecialchars() (http://php.net/manual/fr/function.htmlspecialchars.php) : encode les caractères < > ‘ » & pour qu’ils
soient a chés mais pas exécutés
htmlentities() (http://php.net/manual/fr/function.htmlentities.php) : la même chose que htmlspecialchars(), à la di érence
qu’elle encode beaucoup plus de caractères ; par exemple, le symbole €, les lettres accentuées é à ù…
strip_tags() (http://php.net/manual/fr/function.strip-tags.php) : supprime carrément toutes les balises contenant < et > qui
ne seront pas a chées
En n, si vous souhaitez récupérer des données qui ont été insérées en étant protégées par htmlspecialchars(), htmlentities() ou
addslashes(), il vous faudra utiliser respectivement htmlspecialchars_decode()
(http://www.php.net/manual/fr/function.htmlspecialchars-decode.php), html_entity_decode()
(http://www.php.net/manual/fr/function.html-entity-decode.php) et stripslashes()
(http://www.php.net/manual/fr/function.stripslashes.php).
Exemple concret
Pour nir, voilà un exemple d’un formulaire, avec dessous, la partie « sécurisation » (remarque : ce code sera prochainement obsolète
car PHP pousse à l’utilisation de la « PDO » ; voir mon commentaire (https://www.benji1000.net/la-securite-des-formulaires-
php/#comment-4104) plus bas pour un exemple d’utilisation) :
<?php
if (isset($_POST['envoi']))
{
// Connexion à la base de données
mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
Voilà donc quelques méthodes simples pour éviter que votre formulaire soit une passoire n’hésitez pas à m’indiquer dans les
commentaires si vous avez d’autres astuces pour la sécurisation simple des insertions et lectures de base de données.
(http://xkcd.com/327/)
https://www.benji1000.net/la-securite-des-formulaires-php/ 2/6
24/11/2017 La sécurité des formulaires PHP – Blog de benji1000
Facebook (https://www.facebook.com/sharer/sharer.php?u=https://www.benji1000.net/la-securite-des-formulaires-php/)
Twitter (https://twitter.com/intent/tweet?source=webclient&original_referer=https://www.benji1000.net/la-securite-des-formulaires-
php/&text=La%20s%C3%A9curit%C3%A9%20des%20formulaires%20PHP&url=https://www.benji1000.net/la-securite-des-formulaires-
php/&related=b3nji1000&via=b3nji1000)
Google+ (https://plus.google.com/share?url=https://www.benji1000.net/la-securite-des-formulaires-php/)
Viadeo (https://www.viadeo.com/?url=https://www.benji1000.net/la-securite-des-formulaires-
php/&title=La%20s%C3%A9curit%C3%A9%20des%20formulaires%20PHP)
LinkedIn (https://www.linkedin.com/shareArticle?
mini=true&ro=true&trk=JuizSocialPostSharer&title=La%20s%C3%A9curit%C3%A9%20des%20formulaires%20PHP&url=https://www.benji1000.net/la-
securite-des-formulaires-php/)
E-mail (mailto:?subject=Visit this link nd on https://www.benji1000.net&body=Hi, I found this information for you : "La sécurité des formulaires PHP"!
This is the direct link: https://www.benji1000.net/la-securite-des-formulaires-php/ Have a nice day :))
tutoriel (https://www.benji1000.net/tag/tutoriel/)
ANONYME
7 janvier 2015 à 13 h 52 min (https://www.benji1000.net/la-securite-des-formulaires-php/#comment-23414)
1′ OR ‘1’=’1
RÉPONDRE (HTTPS://WWW.BENJI1000.NET/LA-SECURITE-DES-FORMULAIRES-PHP/?REPLYTOCOM=23414#RESPOND)
BENJI1000
7 janvier 2015 à 15 h 41 min (https://www.benji1000.net/la-securite-des-formulaires-php/#comment-23419)
Roh, voyons…
RÉPONDRE (HTTPS://WWW.BENJI1000.NET/LA-SECURITE-DES-FORMULAIRES-PHP/?REPLYTOCOM=23419#RESPOND)
TOMY
27 avril 2014 à 13 h 49 min (https://www.benji1000.net/la-securite-des-formulaires-php/#comment-4069)
Bonjour,
Très intéressant mais il parle d’abandonner MySQL_connect & MySQL_real_escape_string pour PDO par exemple.
Comment faire donc ?
(source doc php Avertissement Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur)
RÉPONDRE (HTTPS://WWW.BENJI1000.NET/LA-SECURITE-DES-FORMULAIRES-PHP/?REPLYTOCOM=4069#RESPOND)
https://www.benji1000.net/la-securite-des-formulaires-php/ 3/6
24/11/2017 La sécurité des formulaires PHP – Blog de benji1000
BENJI1000
27 avril 2014 à 22 h 54 min (https://www.benji1000.net/la-securite-des-formulaires-php/#comment-4104)
Je n’ai pas encore pris l’habitude d’utiliser la PDO. À ce que j’ai lu, en PDO, il faut passer par des requêtes préparées
(« prepared statements ») qui éliminent le besoin de sécuriser les variables insérées dans la requête. Petit exemple :
« Si votre application utilise exclusivement les requêtes préparées, vous pouvez être sûr qu’aucune injection SQL n’est
possible. » (vu sur la doc de PHP)
Quelques liens :
http://fr.openclassrooms.com/forum/sujet/pdo-gt-mysqlrealescapestring-19722
(http://fr.openclassrooms.com/forum/sujet/pdo-gt-mysqlrealescapestring-19722)
http://stackover ow.com/a/14012675 (http://stackover ow.com/a/14012675)
http://www.php.net/manual/fr/pdo.prepared-statements.php (http://www.php.net/manual/fr/pdo.prepared-
statements.php)
http://fr.php.net/manual/fr/class.pdo.php (http://fr.php.net/manual/fr/class.pdo.php)
RÉPONDRE (HTTPS://WWW.BENJI1000.NET/LA-SECURITE-DES-FORMULAIRES-PHP/?REPLYTOCOM=4104#RESPOND)
LAISSER UN COMMENTAIRE
Commentaire
Nom
Adresse de messagerie
Site web
LAISSER UN COMMENTAIRE
À PROPOS DE CE BLOG
Je m'appelle Benjamin, ingénieur en sécurité informatique sur la région Rhône-Alpes. Retrouvez sur ce blog mes trouvailles du net, des
articles sur l'actualité, des coups de gueule, de la musique, des tutos en informatique, et en sécurité les vidéos virales du moment...
Bon surf !
https://www.benji1000.net/la-securite-des-formulaires-php/ 4/6
24/11/2017 La sécurité des formulaires PHP – Blog de benji1000
(https://twitter.com/b3nji1000)
(http://bandcamp.com/benji1000)
ARTICLES POPULAIRES
RASPBERRY PI
(http://www.benji1000.net/tutoriel-pour-debuter-avec-le-raspberry-pi/)
CATÉGORIES
Fun (https://www.benji1000.net/category/fun/)
Vidéos (https://www.benji1000.net/category/videos/)
Actu (https://www.benji1000.net/category/actualite/)
Informatique (https://www.benji1000.net/category/informatique/)
ARTICLES POPULAIRES
C’EST DIT !
Benjamin dans Comprendre le nommage des chiers vidéos de séries (https://www.benji1000.net/comprendre-le-nommage-des- chiers-videos-
de-series/#comment-51173)
Sylvie Migner dans Comprendre le nommage des chiers vidéos de séries (https://www.benji1000.net/comprendre-le-nommage-des- chiers-
videos-de-series/#comment-51157)
LIENS
https://www.benji1000.net/la-securite-des-formulaires-php/ 6/6