Abwehren von Bots (C#)
von Christian Wenz
Automatisierte Bots bekleinern Weblogs und andere Websites mit Spam und übermitteln Kommentarformulare ohne Jegliche Benutzerinteraktion. Das NoBot-Steuerelement im ASP.NET AJAX Control Toolkit kann dazu beitragen, diese Bots zu bekämpfen.
Überblick
Automatisierte Bots bekleinern Weblogs und andere Websites mit Spam und übermitteln Kommentarformulare ohne Jegliche 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 eines vollständig automatisierten öffentlichen Turingtests von CAPTCHAs, 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 einigen 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 geht über den Rahmen dieses Tutorials 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 ist sehr einfach zu bedienen und ist extrem gut auf Websites wie Blogs, wo es als Erfolg angesehen wird, 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
Mindestanzahl 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 serverseitiger Seite erfolgen, müssen Sie das Ergebnis dieser Überprüfungen überprüfen. Dies kann durch Aufrufen NoBot
der -Methode von IsValid()
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 von aus:
<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>
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 diese Steuerung jedoch mit Bedacht, da nur etwa 90-95% der Benutzer JavaScript aktiviert haben, daher werden 5-10% der Benutzer den Test von fehlschlagen NoBot
.
Diese Fehlermeldung könnte durch einen Bot verursacht worden sein (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)