Le blog: Web, Python, Django, Javascript ...

Django, un captcha contre le spam de vos commentaires

Ce blog qui fonctionne avec Django a été victime d'attaques de spammers. Rien de très méchant mais un peu pénible à la longue. Comment arrêter ces messages désagréables sans pour autant décourager les vrais commentaires, véritable valeur pour un blog. J'ai heureusement trouvé une solution simple en ajoutant un captcha au formulaire des commentaires.

Mais qu'est-ce qu'un captcha?

Vous avez surement déjà vu un captcha mais peut-être ignorez-vous ce mot. C'est tout simplement une petite image qui contient un texte écrit d'une manière un peu difficile à lire afin de tromper les systèmes de reconnaissance de caractères. Le but est de s'assurer que celui qui rentre le commentaire est bien une personne physique et non pas un robot de spam.

Les commentaires sous Django.

Django possède en standard un mécanisme de saisie de commentaires. Il suffit simplement de définir un formulaire et un template d'affichage. La mécanique interne est prête à l'emploi. Afin d'éviter le spam, Django propose un "honeypot", un pot de miel chargé de piéger les spammers trop gourmand. Le principe est simple: le formulaire de saisie du commentaire contient un champ caché sur la page HTML. Un utilisateur humain ne le voit pas donc ne remplit aucune valeur. Un robot de spam, lui charge le formulaire et ne détecte pas que le champ est caché. Il est donc tenté d'inscrire une valeur dans ce champ. Vous l'avez compris, si Django détecte une trace dans le pot de  miel c'est qu'un spammer est passé par là. Malheureusement, les spammers sont non seulement gourmands mais en plus très malins et cette astuce ne fonctionne pas en pratique à 100%.

Pour faire face il faut donc trouver d'autres astuces sans pour autant trop pénaliser les utilisateurs. Plusieurs solutions me sont apparus intéressantes: une détection de spam sur une liste de mots interdits, les même mots revenant très souvent... Une détection par une localisation d'adresse IP, mon blog en français étant commenté par des chinois et des américains... Une modération plus importante en ne faisant afficher les commentaires qu'après validation ...

Finalement j'ai choisi d'implémenter la solution la plus répandu sur Internet le Cpatcha. Parfois un peu embêttant à déchiffrer mais les internautes y sont habitués et je pense que cela ne représente pas un frein trop important.

Django-simple-captcha

Mon choix, il faut le reconnaître a été facilité par l'existence du module Django-Simple-Captcha. L'ajout à ce blog a été assez simple.

  1. Installez le module grâce à easy-install comme expliqué dans la documentation
  2. Ajouter 'captcha' dans les applications Django du site
  3. Ajouter (r'^captcha/', include('captcha.urls')) dans les urls
  4. Modifier le formulaire de saisie en ajoutant un CaptchaField

Et voilà! Un nouveau champ apparaît sur le formulaire demandant à l'internaute de déchiffrer un texte et au robot de spam de faire demi-tour.

Cette solution simple et rapide à implémenter a pour l'instant découragé les spammers. Si ca n'est pas suffisant, Django-Simple-Captcha dispose d'options pour compliquer un peu plus la tâche. Ce système n'est pas garanti à 100% mais pour l'instant c'est pour moi efficace.

En attendant de lire vos commentaires :)


Commentaires rss
Posté par psam le dimanche 25 juillet 2010 à 15:04
hihi, spammé quand même par Ramsey et ses loans, dans un billet sur la lutte contre le spam, mdr.
Tu passes un coup de balai ?

Posté par luc le dimanche 25 juillet 2010 à 22:20
Comme je le dis dans le billet, simple-captcha c'est pas 100% infaillible, surtout en config mini, mais ca a quand même limité beaucoup le nombre de spam et c'est très facile à mettre en place.


Posté par luc le jeudi 09 septembre 2010 à 11:25
simple-captcha a nettement diminué le nombre de spams. Il en reste quelques uns très ponctuellement. J'ai donc profité d'une nouvelle version du blog pour rendre le captcha un peu plus difficile. django-simple-captcha est fortement configurable.

Nom: Email: URL: Commentaire: Si vous saisissez quelque chose dans ce champ, votre commentaire sera considéré comme étant indésirable: Captcha: captcha

Luc JEAN

09.65.20.15.70

ljean@apidev.fr

Luc JEAN

Suivez les nouveautés

Wikio RSS  RSS Blog Python Django selenium Rss commentaires
Paperblog : Les meilleurs actualités issues des blogs Follow luc_apidev on Twitter