Rechercher dans les publications Rechercher:

Imprimer cet article

Rechercher dans les publications Auteur : LightAtTheEnd

Articles de l'auteur :
Sécurité et formulaire PHP
Sécurité et formulaire PHP

Sécurité et formulaire PHP

[Niveau : Débutant]

18 septembre 2005, par LightAtTheEnd

Vous avez créé en php un petit formulaire de contact, un formulaire d’inscription sur votre site ? Bien ! Mais, avez-vous pensez à la sécurité de votre site après la création de celui-ci ? Voici quelques conseils pour éviter de mauvaises surprises...

Le formulaire

Method : POST ou GET ?

Tout formulaire, possède un champ appelé "method". Il y a 2 façons d’envoyer les informations d’un formulaire. Soit la méthode POST, soit la méthode GET.

<form method="POST" action="formulaire.php"> // Méthode POST
<form method="GET" action="formulaire.php"> // Méthode GET

Du point de vue sécurité, il est fortement conseillé d’utiliser la méthode POST pour vos formulaires, (surtout si celui-ci envoie des données confidentielles telles que login ou password), étant donné que la méthode GET fait passer les variables par l’URL, et donc ces variables peuvent être plus facilement détournée.

Champ HIDDEN

Ces champs ne sont pas visibles lorsque l’on regarde le formulaire avec le naviguateur. Mais c’est à la portée de tout le monde, de faire ’afficher la source’ et de voir ce qu’ils contient. N’y mettez donc pas d’indice, tels que des clés, ou des adresses secretes de votre site.

Exemple à ne pas faire :

<INPUT TYPE=HIDDEN NAME="Siok" VALUE="http://www.monsite.com/zonesecret.php">

Réception des données

Du ménage dans les caractères

A la réception des données, il faut faire du nettoyage dans les caractères. En effet, un internaute normal ne vous causera aucun soucis, mais si un jour, un pirate a le malheur de tomber sur votre site, et que votre formulaire ne fait pas de traitement particulier, vous allez être dans de beaux draps.

Voici la principale fonction à appliquer à vos données réceptionnées :

- htmlentities()

Cette fonction vous permettra d’éviter que vos données contiennent des bouts de codes html, ou autre caractères pouvant poser problèmes tels que <>&"’

Sans cette fonction (il en existe d’autres, mais celle-ci est conseillée), il serait en effet aisé de placer du code malicieux, des effets javascripts, polluer votre site, effectuer des requetes sql non voulues...

Par exemple,

<?php
echo "Vous venez d'écrire : ".$_POST['Description']."";
?>

est à transformer en :

<?php
echo "Vous venez d'écrire : ".htmlentities($_POST['Description'])."";
?>

Voilà déjà des soucis en moins.

Protégez vos requêtes SQL

Lors de la réception des données, vous faites peut être des appels à votre base de donnée en fonction des données envoyées.

Ajoutez des apostrophes autour de vos champs à toutes les sauces !

Stocker l’IP / date

Même si une IP peut être détournée, par mesure de précaution, stocker l’IP de la personne qui remplit votre formulaire. Faites de même pour la date et l’heure.

Encoder vos mots de passe

N’hésitez pas à utiliser la fonction md5 fournie par php. Il vaut mieux des mots de passes cryptés, plutôt que des mots de passe en clair, récupérable sur votre base de donnée

Anti-flood

Peut être recevez-vous un email lors de l’envoi de votre formulaire. Pensez alors à installer un système qui évitera la répétition d’envoi de données provenant de la même IP par exemple, ou vous risqueriez d’obtenir rapidement une boite email peu consultable.

Voila, cette publication est terminée. Elle ne prétend pas recenser toutes les sécurités possibles et inimaginables, mais seulement les plus basiques. Et ce n’est pas parce que vous les avez installés, que vous êtes à l’abri. Vous éviterez en tout cas, les principales erreurs à ne pas commettre.