Share via


Abwehren von Bots (C#)

von Christian Wenz

PDF herunterladen

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 Postbacks
  • CutoffWindowSeconds Länge des Zeitintervalls, in dem Postbacks von einer IP-Adresse Measures sind
  • CutoffMaximumInstances 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 NoBotder -Methode von IsValid() erfolgen. Es verfügt über ein Argument (als out Parameter/ByRef Parameter), das vom Typ NoBotStateist. Die Zeichenfolgendarstellung enthält den Grund, warum die Überprüfung fehlschlägt und Valid andernfalls. Der folgende Code gibt eine Nachricht entsprechend dem NoBotErgebnis 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.

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