Sécurisation de formulaire

Contenu du snippet

Bonjour,
j'ai lu sur divers forums que l'injection sql peut etre dangereux si on sécurise mal le traitement des données d'un formulaire vers la page de traitement.
J'ai lu qu'il fallait faire un "mysql_real_escape_string" sur les données postée pour empécher des injections de code du genre "OR a = a" , ou \' OR \'a\'=\'a ..
Je vais partager une partie du code que j'ai mis en place pour renforcer un peu plus la sécurité, dites moi ce que vous en pensez, et si c'est une mauvaise méthode..!
Cette méthode consiste à éviter les "=" ou "<" ou ">" ou "?" ou "+" dans les chaines postées.

Pour un formulaire classique de connection :
<form method="post" name="form_connect" action="traitement_du_fichier.php">
<input type="text" name="pseudo"/>
<input type="password" name="pass" />
<input type="submit" value="ok" name="envoi" />
</form>

Source / Exemple :


if(isset($_POST['pseudo'])){
	$chaine_a_tester=$_POST['nom_du_client'].$_POST['password_du_client'];
	$error="";
// caracteres interdit: = < > + ?
// Si un de ces caractere est dans le $chaine_a_tester, alors on rajoute le chiffre de sa position dans la chaine, dans la variable $error qui ne sera plus vierge: strpos() renvoie ce chiffre.
	$caractere_interdit="=";
	$error.=strpos($chaine_a_tester,$caractere_interdit);
	$caractere_interdit="<";
	$error.=strpos($chaine_a_tester,$caractere_interdit);
	$caractere_interdit=">";
	$error.=strpos($chaine_a_tester,$caractere_interdit);
	$caractere_interdit="?";
	$error.=strpos($chaine_a_tester,$caractere_interdit);
	$caractere_interdit="+";
	$error.=strpos($chaine_a_tester,$caractere_interdit);
		// Si $error est toujours vierge, alors tout est, on peut tester si le pseudo et le password correspondent
	if($error==""){
		$login=mysql_real_escape_string($_POST['nom_du_client']);
		$pass=mysql_real_escape_string($_POST['password_du_client']);
		$sql = "SELECT login,password FROM login WHERE login='".$login."' AND password = '".$pass."'";
		$sql2=mysql_query($sql) or die(mysql_error());
		$slq3=mysql_num_rows($sql2);
		if($sql3==1){
			echo "Login et mot de passe valide";
		}else{
			echo "Login ou mot de passe invalide";
		}

	}else{
// Si la variable $error n'est pas vierge, c'est que les caractere interdits ont été rentrés, peut etre tentative de piratage?!
		echo "Certains champs sont interdit car trop dangereux, et votre pseudo ou mot de pass sont incorrects!";
	}
}

Conclusion :


Il est aussi possible de tester si un champ email est valide avec ce code par exemple:

$adresse=$_POST['pseudo'];
$carac_obligatoire="@";
$carac_arobas=strpos($adresse,$carac_obligatoire);
$carac_obligatoire2=".";
$carac_point=strpos($adresse,$carac_obligatoire2);
if($carac_arobas<0 && $carac_point<0){
echo "Email valide";
}else{
echo "email invalide";
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.