Abwehren von Bots (VB)
von Christian Wenz
Automatisierte Bots pflastern Weblogs und andere Websites mit Spam und übermitteln Kommentarformulare ohne Benutzerinteraktion. Das NoBot-Steuerelement im ASP.NET AJAX Control Toolkit kann dazu beitragen, diese Bots zu bekämpfen.
Überblick
Automatisierte Bots pflastern Weblogs und andere Websites mit Spam und ü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 zum Besiegen von Bots ist die Verwendung von CAPTCHAs Completely Automated Public Turing Test, um Computer und Menschen voneinander zu unterscheiden. 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 ein CAPTCHA in der Regel aus einem Bild mit verzerrten Buchstaben. Die Idee ist, dass nur ein Mensch die Buchstaben auf dem Bild lesen kann, während OCR-Algorithmen fehlschlagen.
Dieser Ansatz hat mehrere Vor- und Nachteile, aber eine Diskussion darüber sprengt den Rahmen dieses Tutorials. Es gibt jedoch ein Steuerelement im ASP.NET AJAX Control Toolkit, das einen ähnlichen Ansatz bietet: NoBot
. Es ist leichter zu überwinden als ein CAPTCHA, ist aber sehr einfach zu bedienen und ist sehr gut auf Websites wie Blogs, wo es als Erfolg gilt, wenn die meisten Spam-Versuche besiegt werden, was die NoBot
Kontrolle tun kann.
NoBot
fängt das Postback des aktuellen ASP.NET Webformulars ab, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
- Der Browser kann ein JavaScript-Puzzle nicht lösen (für instance, wenn JavaScript deaktiviert ist).
- Der Benutzer hat das Formular an "fast" übermittelt.
- Die Client-IP-Adresse hat das Formular in einem bestimmten Zeitraum zu oft übermittelt.
Um diese Bedingungen zu überprüfen, benötigt das NoBot
Steuerelement diese Attribute (alle optional):
ResponseMinimumDelaySeconds
Minimale Anzahl von Sekunden zwischen PostbacksCutoffWindowSeconds
Länge des Zeitintervalls, in dem Postbacks von einer IP-Adresse Measures sindCutoffMaximumInstances
maximale Anzahl von Sekunden pro Zeitintervall
Das folgende Markup erfordert, dass mindestens zwei Sekunden zwischen Postbacks vergehen und dass innerhalb eines Intervalls von 30 Sekunden nur fünf Oder weniger Postbacks vorhanden sind:
<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />
Stellen Sie dann wie üblich sicher, dass Sie die ScriptManager
auf der Seite enthalten, damit die ASP.NET AJAX-Bibliothek geladen wird und das Control Toolkit verwendet werden kann:
<asp:ScriptManager ID="asm" runat="server" />
Da die meisten Überprüfungen NoBot
auf der Serverseite durchgeführt werden, müssen Sie das Ergebnis dieser Überprüfungen überprüfen. Dies kann durch Aufrufen NoBot
der IsValid()
-Methode erfolgen. Es verfügt über ein Argument (als out
Parameter/ByRef
Parameter), das vom Typ NoBotState
ist. Die Zeichenfolgendarstellung enthält den Grund, warum die Überprüfung fehlschlägt und Valid
andernfalls. Der folgende Code gibt eine Nachricht entsprechend dem NoBot
Ergebnis 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 Übermitteln und ein Label-Element, um die Nachricht auszugeben. 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 senden oder das Formular siebenMal innerhalb von dreißig Sekunden übermitteln, erhalten Sie eine Fehlermeldung. Verwenden Sie dieses Steuerelement jedoch sinnvoll, da nur etwa 90-95 % der Benutzer JavaScript aktiviert haben, sodass 5-10 % der Benutzer den Test nicht ausführen NoBot
.
Diese Fehlermeldung könnte von einem Bot verursacht worden sein (Klicken Sie, um das bild in voller Größe anzuzeigen).