Deblan blog

Tag #flood

[Retour] Contrer des robots stupides sans captcha

C'est un post rapide qui va permettre de faire un retour sur la solution pour contrer les robots sans utiliser de captcha.

Pour rappel, le concept est simple : on place dans l'action du formulaire un mot clé qui invalide sa soumission. Ce mot clé est supprimé quand l'utilisateur déplace sa souris dans la page qui contient ce formulaire. Cette méthode admet que l'utilisateur a activé le Javascript sur son navigateur.

Après quelques mois d'utilisation, que peut-on en conclure ? Cette méthode fonctionne du feu de dieu ! Je suis passé à coté de plus de 50 milles commentaires indésirables. La crainte que j'avais se portait sur les supports mobiles : finalement, aucune inquiétude, ça fonctionne très bien sur les smartphones et les tablettes.

J'ai implanté cette solution sur un blog Wordpress et ça fonctionne très bien également...À croire que les développeurs de robots sont des manches.

Évidement, tout développement spécifique de robot va contrer cette sécurité, mais c'est assez rare finalement.

Sécurité informatique


Contrer des robots stupides sans captcha

Ceux qui côtoyaientt mon ancien blog devaient rentrer un captcha pour poster un commentaire.

Le problème c'est que personnellement, ça me gonfle de me cogner une image presque illisible à lire pour un simple message. Seulement il y a toujours et encore nos amis les robots pour casser l'ambiance.

Comment bloquer ces robots sans captcha ?

Pour vous j'ai une astuce simple qui depuis 2 jours a permis de bloquer un peu plus de 300 robots (tout les robots qui ont essayé de poster d'ailleurs).

Cette technique ne fonctionne que pour les robots complétements cons et qui ne sont pas développés spécifiquement !

Étape 1 : créer une page dédiée à la gestion des robots

Vous devez (pouvez) créer une page qui va réceptionner les robots détectés et qui leur laissera un joli message de bienvenue. De mon coté, j'ai aussi décidé d'enregistrer les informations réceptionnées ($_POST, $_GET, $_COOKIE, $_SERVER).

J'ai décidé de rendre accessible cette page avec l'url "/bot"

Étape 2 : préparer les formulaires à sécuriser

Comme je l'ai écrit, c'est simple et pour ce faire, il suffit d'ajouter l'url de la page pour les robots dans l'action du formulaire.

Par exemple, voila ce que vous trouverez dans le code source de ce blog :

<form method="post" id="comment_form" action="/bot?/post/429/Contrer-des-robots-stupides-sans-captcha#comment_form" enctype="multipart/form-data">

Il vaut évidement remarquer le "/bot?" ajouté à la vraie action du formulaire.

Étape 3 : owned le bot

Comme les robots sont cons et qu'ils sont souvent démunis d'un tas d'outils, il suffit d'utiliser l'un d'eux : javascript.

Pour se faire, on va définir que si la personne bouge la souris sur la page, alors elle n'est pas un bot. Par conséquent, il suffit de supprimer "/bot?" de l'action du formulaire :

<script type="text/javascript">
$(document).ready(function() {
	$(document).mousemove(function() {
		var action = $('#comment_form').attr('action').replace(/^\/bot\?/, '');
		$('#comment_form').attr('action', action);
	});
});
</script>

Edit : Une optimisation du code a été proposée par GromNaN et je la préconise. La voici :

<script type="text/javascript">
$(document).ready(function() {
	$(document).one('mousemove', function() {
		var $form = $('#comment_form');
		var action = $form.attr('action').replace(/^\/bot\?/, '');
		$form.attr('action', action);
	});
});
</script>

Rien de plus simple et ça semble très bien fonctionner.

Seul petit bémol : ça implique que les internautes ont le javascript activé.