Zwalczanie botów (C#)

Autor Christian Wenz

Pobierz kod lub Pobierz plik PDF

Automatyczne botów tynków Weblogs i innych witryn internetowych z spamem, przesyłanie formularzy komentarzy bez interakcji z użytkownikiem. Formant NoBot w narzędziu ASP.NET AJAX Control Toolkit może pomóc w walce z tymi botówami.

Omówienie

Automatyczne botów tynków Weblogs i innych witryn internetowych z spamem, przesyłanie formularzy komentarzy bez interakcji z użytkownikiem. Formant NoBot w narzędziu ASP.NET AJAX Control Toolkit może pomóc w walce z tymi botówami.

Kroki

Typowym podejściem do pokonania botów jest korzystanie z CAPTCHAs całkowicie zautomatyzowanego, publicznego testu Turing do informowania komputerów i ludzi. Test Turing był pierwotnie testem, w którym ktoś musiał zdecydować, czy partner komunikacji jest człowiekiem, czy komputerem. W sieci Web CAPTCHA zwykle składa się z obrazu z niezakłóconymi literami. Pomysłem jest, że tylko człowiek może odczytać litery z obrazu, a algorytmy OCR nie powiodą się.

Istnieje kilka zalet i wad tego podejścia, ale dyskusje na ten temat wykraczają poza zakres tego samouczka. Istnieje jednak kontrola w narzędziu ASP.NET AJAX Control Toolkit, która zapewnia podobne podejście: NoBot. Jest to prostsze w porównaniu z CAPTCHA, ale jest bardzo łatwe w użyciu i jest bardzo proste w odniesieniu do witryn sieci Web, takich jak Blogi, które są uważane za sukces w przypadku, gdy większość prób spamu zostanie poddana kontroli NoBot.

NoBot przechwytuje ogłaszanie zwrotne bieżącego formularza sieci Web ASP.NET w przypadku spełnienia co najmniej jednego z następujących warunków:

  • Przeglądarka nie może usunąć układanki JavaScript (na przykład w przypadku dezaktywowania kodu JavaScript)
  • Użytkownik przesłał formularz do programu Fast
  • Adres IP klienta przesłał formularz zbyt często w określonym czasie.

Aby można było sprawdzić te warunki, formant NoBot wymaga tych atrybutów (wszystkie opcjonalne):

  • ResponseMinimumDelaySeconds minimalną liczbę sekund między ogłaszaniem zwrotnym
  • CutoffWindowSeconds długość przedziału czasu, w którym zwroty od jednego adresu IP są mierzone
  • CutoffMaximumInstances maksymalną liczbę sekund na przedział czasu

Poniższe znaczniki zależą od tego, że co najmniej dwa sekundy upływa między ogłaszaniem zwrotnym i że w interwale 30-sekundowym występuje tylko pięć zwrotów.

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

Następnie w zwykły sposób Pamiętaj o uwzględnieniu ScriptManager na stronie, tak aby Biblioteka ASP.NET AJAX została załadowana i można było użyć zestawu narzędzi do sterowania:

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

Ponieważ większość kontroli NoBot odbywa się po stronie serwera, należy sprawdzić wynik tych walidacji. Można to zrobić, wywołując metodę IsValid() NoBot. Ma jeden argument (jako out parametr/ByRef, który jest typu NoBotState. Reprezentacja ciągu zawiera przyczynę niepowodzenia sprawdzania i Valid w przeciwnym razie. Poniższy kod generuje komunikat zgodnie z wynikami 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>

Na koniec potrzebna jest forma przesyłania i elementu etykiety, który będzie wyprowadzać komunikat, a wszystko jest gotowe!

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

Po uruchomieniu tego skryptu i zdezaktywowaniu kodu JavaScript lub przesłaniu formularza w ciągu pierwszych dwóch sekund lub przesłaniu formularza siedem razy w ciągu 30 sekund zostanie wyświetlony komunikat o błędzie. Należy jednak użyć tej kontrolki, ponieważ tylko od 90-95% użytkowników ma aktywowany kod JavaScript, w związku z czym 5-10% użytkowników zakończy się niepowodzeniem NoBot.

ten komunikat o błędzie mógł zostać spowodowany przez bot

Ten komunikat o błędzie może być spowodowany przez bot (kliknij, aby wyświetlić obraz o pełnym rozmiarze)