Sécurisation de formulaire

De
Aller à : navigation, rechercher

Sécurisation de formulaire

Nous aborderons ici deux méthodes pour sécuriser un formulaire sur votre site, avec et sans captcha.

La première méthode utilise le système reCAPTCHA de Google (à venir) ; la seconde sera sous la forme de deux cases à cocher, l'une d'elle invisible, qui «piège» les robots.

1) reCAPTCHA (à venir)

2) Anti spam et anti robot sans captcha

Ce code n'a pas été développé par nos soins. En voici la source : https://codes-sources.commentcamarche.net/source/42273-anti-spam-et-anti-robot-securisation-de-formulaire-sans-captcha

But de ce code : Ce code permet de sécuriser un formulaire sans utiliser d'image de type captcha. Il permet d'empêcher les robots spammeurs de valider un formulaire. En effet, un captcha peut s'avérer lourd, car il est parfois illisible par l'utilisateur, mais déchiffrable par un robot. Cette méthode filtrera la majorité des robots. Celle-ci peut être contournée, mais cela demande au spammeur d'étudier votre site pour contourner la protection, ce qui n'arrive presque jamais.

Explications du code : Ce code affiche deux cases à cocher : «Je confirme que je suis un être humain, et pas un robot spammeur» et «I'm a Stupid Spam-Robot». Lorsqu'un utilisateur voudra valider votre formulaire, il devra cocher la case «Je confirme que je suis un être humain, et pas un robot spammeur». L'autre case est invisible pour l'utilisateur, mais pas pour le robot. Un robot cochera toutes les cases, ou aucune des cases. Il ne pourra donc pas valider le formulaire. Afin que le robot ne puisse retenir les réponses à cocher ou à ne pas cocher, l'heure actuelle et une fonction MD5 sont intégrées dans la requête POST du formulaire.

Code :

<?php
// Récuperation des valeurs en GET ou en POST (anti-spam)
$try=(isset($_GET['try'])?$_GET['try']:(isset($_POST['try'])?$_POST['try']:''));
$nobotv=(isset($_GET['nobotv'])?$_GET['nobotv']:(isset($_POST['nobotv'])?$_POST['nobotv']:''));
$nobotc=(isset($_GET['nobotc'])?$_GET['nobotc']:(isset($_POST['nobotc'])?$_POST['nobotc']:''));
$nobots=(isset($_GET['nobots'])?$_GET['nobots']:(isset($_POST['nobots'])?$_POST['nobots']:''));

// Variable
$nobot = time().'_'.rand(50000, 60000);

// Si le visiteur soumet le formulaire
if($try=='send') {
	if(($nobotc!=md5($nobotv)) or ($nobotv=='') or ($nobots!='')) {
		echo "\n<br />  <b>Anti-Spam</b> : Vous n'avez pas coché la case !";
		// Si la case n'est pas cochée alors on affiche un message d'erreur.
		// ICI VOTRE CODE pour ré-afficher le formulaire (soit en appelant le fichier concerné, soit en restant sur cette même page, en fonction de votre cas)
	}
	else {
		// Si la case est cochée, alors on peut continuer vers la suite de l'exécution de formulaire :
		// ICI VOTRE CODE (pour vérifier les champs du formulaire -et afficher un message d'erreur si les champs ne sont pas remplis-, pour envoyer le mail... etc)
	}
}
?>

<!-- Affichage du formulaire -->
<form action="" method="POST">
	<!-- Lignes requises pour la vérification de robot : -->
	<input type="hidden" name="try" value="send">
	<input type="hidden" name="nobotv" value="<?php echo $nobot; ?>">

	<!-- ICI VOTRE CODE pour ajouter ce que vous voulez dans votre formulaire HTML -->

	<!-- On ajoute les cases à cocher en bas du formulaire : -->
	<h3>Anti-Spam :</h3>
	<input type="checkbox" name="nobotc" value="<?php echo md5($nobot); ?>" /> Je confirme que je suis un être humain, et pas un robot spammeur.
	<div style="position: absolute; visibility: hidden; left: -5000; top : -5000">
		<br><input type="checkbox" name="nobots" value="<?php echo time(); ?>" />I'm a Stupid Spam-Robot
	</div>
</form>