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.
- Installez le module grâce à easy-install comme expliqué dans la documentation
- Ajouter 'captcha' dans les applications Django du site
- Ajouter (r'^captcha/', include('captcha.urls')) dans les urls
- 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 :)