Traitement des formulaires en Php et sécurité
Par Exotux le samedi 14 juillet 2007, 12:55 - PHP - Lien permanent
Lorsque que l'on met sur un site internet un formulaire à la disposition des internautes, il convient de s'assurer que les données saisies correspondent parfaitement à ce que l'on attends. Pour cela il faut vérifier l'ensemble des données transmises par l'internaute. Le but de ce billet est de vous proposer une méthode, une règle de bonne conduite afin d'éviter certaines erreurs d'inattention.
Prenons l'exemple de ce formulaire tout simple :
<form action="login.php" mthode="post">
<label for="frm_login">Login : </label>
<input type="text" name="login" id="frm_login" />
<label for="frm_password">Password : </label>
<input type="text" name="password" id="frm_password" />
<label for="frm_sexe">Sexe : </label>
<select name="sexe" id="frm_sexe">
<option value="Masculin" selected="selected">Masculin</option>
<option value="Féminin">Féminin</option>
</select>
<input type="submit" value="Envoyer" />
</form>
Lors de la soumission de ce formulaire la page login.php est appelée et les données sont transmises à la page par la méthode POST. Ainsi, sur la page login.php nous avons les données saisies par l'utilisateur dans le tableau $_POST
La méthode décrite conciste à s'assurer que les données que nous allons traiter sont conformes à nos attentes. Pour cela nous allons utiliser un tableau qui contiendra l'ensemble des données en provenance du formulaire et qui ont été vérifiées.
<?php
$tVerifier = array(); // Contient les données vérifiées
if ( ctype_alnum($_POST['login']) ) {
$tVerifier['login'] = $_POST['login'];
}
if ( ctype_alnum($_POST['password']) ) {
$tVerifier['password'] = $_POST['password'];
}
$tSexe = array('Masculin','Féminin');
if ( in_array($_POST['sexe'], $tSexe) ) {
$tVerifier['sexe'] = $_POST['sexe'];
}
?>
De cette façon nous sommes certain de la validité des données présentes dans $tVerifier. Si dans un script nous trouvons la variable $_POST['password'] utilisée directement (par exemple dans une requête SQL), cela veut sans doute dire qu'elle n'a pas été vérifié et qu'il peut y avoir des risques.
Rien de bien nouveau techniquement mais plutôt une méthode de travail que je trouve très efficace.




