Lutter contre les Bots

| Christian Wenz | Philippe Vialatte (Traduction) |

Les Bots automatisés empestent les blogs et d'autres sites avec du spam, soumettant des formulaires de commentaires sans aucune interaction utilisateur. Le contrôle NoBot de l'ASP.NET AJAX Control Toolkit peut contribuer à lutter contre les bots.
Voir une démo
Téléchargez le code de ce tutoriel

- Titre : Lutter contre les Bots

- Auteurs : Christian Wenz, Philippe Vialatte (Traduction)

- Parution : 3 mai 2009

- Mise à jour : 3 mai 2009

- Licence : Copyright ® 2009 Equipe Dotnet. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Étapes

Traduction

Cet article est la traduction la plus fidèle possible de l'article original : Fighting Bots

Étapes

Une approche commune pour combattre les bots est d'utiliser les captchas (Completely Automated Public Turing test to tell Computers and Humans Apart, Test de Turing completement automatisé pour différencier les humains et les ordinateurs). Un test de Turing était à l'origine un test où une personne doit décider si un partenaire lors d'une communication est un humain ou une machine. Sur le web, un CAPTCHA est généralement constitué d'une image, sur laquelle on voit des lettres déformées. L'idée est que seul un humain peut lire les lettres sur l'image, alors qu'un algorithme d'OCR échouera.

Il ya plusieurs avantages et inconvénients à cette approche, mais une discussion sur ce sujet est hors de la portée de ce tutoriel. Il y a cependant un contrôle dans l'ASP.NET AJAX Control Toolkit, qui fournit une approche similaire: NoBot . Il est plus facile à surmonter qu'un CAPTCHA, mais il est très facile à utiliser et fonctionne très bien sur des sites Web comme les blogs, où on considère comme un succès si la plupart des tentatives de spam sont vaincues, ce que le contrôle NoBot peut faire.

NoBot intercepte les postback du formulaire Web ASP.NET courant si au moins l'une de ces conditions est remplie :

- Le navigateur ne parvient pas à résoudre un puzzle JavaScript (par exemple lorsque Javascript est désactivé)

- L'utilisateur a soumis le formulaire trop vite

- L'adresse IP du client a présenté le formulaire trop souvent dans une certaine période de temps.

Afin de vérifier ces conditions, le contrôle NoBot exige ces attributs (qui sont tous facultatif) :

- ResponseMinimumDelaySeconds : minimum de secondes entre deux postbacks

- CutoffWindowSeconds : durée de l'intervalle pendant lequel les postbacks d'une IP donnée sont mesurés

- CutoffMaximumInstances : nombre maximal de postback dans l'intervalle de temps défini par CutoffWindowSeconds

Les balises suivantes obligent à ce qu'au moins deux secondes s'écoulent entre deux postbacks et qu'il ya seulement cinq postbacks ou moins dans un intervalle de 30 secondes :

<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />

Ensuite, comme d'habitude, veillez à inclure le ScriptManager dans la page de sorte que la bibliothèque ASP.NET AJAX soit chargée, et que le Control Toolkit puisse être utilisé :

<asp:ScriptManager ID="asm" runat="server" />

Étant donné que la plupart des contrôles effectués par NoBot le sont coté serveur, vous avez besoin de vérifier le résultat de ces validations. Cela peut être fait en appelant la méthode IsValid() du contrôle NoBot. Il a un argument (un paramètre out/ByRef), qui est de type NoBotState. Sa représentation sous forme de chaîne contient la raison lors de l'échec de la vérification et Valid autrement. Le code suivant affiche un message selon le résultat NoBot :

<script runat="server">
void Page_Load(){
if (Page.IsPostBack){
NoBotState state;
if (!nb.IsValid(out state)){
Label1.Text = "Data refused ("
+ HttpUtility.HtmlEncode(state.ToString()) + ")";
}else{
Label1.Text = "Data entered.";
}
}
}
</script>

Enfin, vous avez besoin d'un formulaire à soumettre, un élément Label pour la sortie du message, et c'est fini!

Your comment:
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/><br />
<input type="submit" id="Submit1" runat="server" value="Submit Form" /><br />
<asp:Label ID="Label1" runat="server" />

Lorsque vous exécutez ce script, si vous désactivez JavaScript, ou que vous soumettez le formulaire avant les deux premières secondes, ou que vous soumettez le formulaire plus de cinq fois dans les trente secondes, vous obtiendrez un message d'erreur. Mais il faut utiliser ce contrôle à bon escient, puisque seulement 90 à 95% des utilisateurs ont JavaScript activé, donc 5 à 10% des utilisateurs ne pourront pas passer les tests de NoBot.

Ce message d'erreur peut avoir été causé par un bot