Freigeben über


Kämpfende Bots (VB)

von Christian Wenz

PDF herunterladen

Automatisierte Bots verputzen Weblogs und andere Websites mit Spam, übermitteln Kommentarformulare ohne Benutzerinteraktion. Das NoBot-Steuerelement im ASP.NET AJAX Control Toolkit kann dazu beitragen, diese Bots zu bekämpfen.

Übersicht

Automatisierte Bots verputzen Weblogs und andere Websites mit Spam, übermitteln Kommentarformulare ohne Benutzerinteraktion. Das NoBot-Steuerelement im ASP.NET AJAX Control Toolkit kann dazu beitragen, diese Bots zu bekämpfen.

Schritte

Ein gängiger Ansatz zur Bekämpfung von Bots besteht darin, CAPTCHAs (Completely Automated Public Turing Test zur Unterscheidung zwischen Computern und Menschen) zu verwenden. Ein Turing-Test war ursprünglich ein Test, bei dem jemand entscheiden musste, ob ein Kommunikationspartner ein Mensch oder eine Maschine ist. Im Web besteht eine CAPTCHA in der Regel aus einem Bild mit einigen verzerrten Buchstaben. Die Idee ist, dass nur ein Mensch die Buchstaben auf dem Bild lesen kann, während OCR-Algorithmen fehlschlagen.

Es gibt mehrere Vor- und Nachteile für diesen Ansatz, aber eine Diskussion darüber geht über den Rahmen dieses Lernprogramms hinaus. Es gibt jedoch ein Steuerelement im ASP.NET AJAX Control Toolkit, das einen ähnlichen Ansatz bietet: NoBot. Es ist einfacher zu überwinden als ein CAPTCHA, aber es ist sehr einfach zu bedienen und schlägt sich äußerst gut auf Websites wie Blogs, wo es als Erfolg gilt, wenn die meisten Spamversuche besiegt werden, was die NoBot Steuerung tun kann.

NoBot fängt das Postback des aktuellen ASP.NET Webformulars ab, wenn mindestens eine dieser Bedingungen erfüllt ist:

  • Der Browser kann ein JavaScript-Puzzle nicht lösen (z. B. wenn JavaScript deaktiviert wird)
  • Der Benutzer hat das Formular schnell übermittelt.
  • Die Client-IP-Adresse hat das Formular zu häufig in einem bestimmten Zeitraum übermittelt.

Um nach diesen Bedingungen zu suchen, erfordert das NoBot Steuerelement diese Attribute (alle optional):

  • ResponseMinimumDelaySeconds Minimale Anzahl von Sekunden zwischen Postbacks
  • CutoffWindowSeconds Länge des Zeitintervalls, in dem Postbacks von einer IP-Adresse gemessen werden
  • CutoffMaximumInstances maximale Anzahl von Sekunden pro Zeitintervall

Das folgende Markup erfordert, dass mindestens zwei Sekunden zwischen Postbacks und nur fünf Postbacks oder weniger innerhalb eines 30-Sekunden-Intervalls verstrichen sind:

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

Stellen Sie dann wie gewohnt sicher, dass Sie das ScriptManager in die Seite einfügen, damit die ASP.NET AJAX-Bibliothek geladen wird und das Steuerelement-Toolkit verwendet werden kann.

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

Da die meisten Prüfungen NoBot auf serverseitiger Seite durchgeführt werden, müssen Sie das Ergebnis dieser Überprüfungen überprüfen. Dies kann durch Aufrufen NoBotder IsValid() Methode erfolgen. Es hat ein Argument (als out Parameter/ByRef Parameter), das vom Typ NoBotStateist. Die Zeichenfolgendarstellung enthält den Grund im Falle eines Überprüfungsfehlers und Valid andernfalls. Der folgende Code gibt eine Nachricht gemäß dem Ergebnis von NoBot aus:

<script runat="server">
 Sub Page_Load()
 If Page.IsPostBack Then
 Dim state As NoBotState
 If Not nb.IsValid(state) Then
 Label1.Text = "Data refused (" + HttpUtility.HtmlEncode(state.ToString()) + ")"
 Else
 Label1.Text = "Data entered."
 End If
 End If
 End Sub
</script>

Schließlich benötigen Sie ein Formular zum Senden und ein Bezeichnungselement, um die Nachricht auszugeben, und Sie sind fertig!

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" />

Wenn Sie dieses Skript ausführen und JavaScript deaktivieren oder das Formular innerhalb der ersten zwei Sekunden übermitteln oder das Formular siebenmal innerhalb von dreißig Sekunden übermitteln, wird eine Fehlermeldung angezeigt. Verwenden Sie dieses Steuerelement jedoch klug, da nur etwa 90-95% der Benutzer JavaScript aktiviert haben, weshalb 5-10% der Benutzer den Test nicht bestehen NoBot.

Diese Fehlermeldung könnte durch einen Bot verursacht worden sein.

Diese Fehlermeldung könnte durch einen Bot verursacht worden sein (Klicken Sie, um das Bild in voller Größe anzuzeigen)