Борьба с ботами (C#)

Кристиан Венц

Скачать в формате PDF

Автоматические боты засоряют веб-журналы и другие сайты спамом, заполняя комментарии без взаимодействия с пользователем. Элемент управления NoBot в наборе средств управления AJAX ASP.NET может помочь бороться с этими ботами.

Обзор

Автоматические боты наводняют веб-журналы и другие веб-сайты со спамом, отправляя формы для комментариев без участия пользователя. Элемент управления NoBot в наборе средств управления AJAX ASP.NET может помочь бороться с этими ботами.

Шаги

Одним из распространенных подходов к защите от ботов является использование CAPTCHA - полностью автоматизированного публичного теста Тьюринга для различения компьютеров и людей. Тест Тьюринга был первоначально тестом, где кто-то должен решить, является ли партнер коммуникации человеком или машиной. В Интернете CAPTCHA обычно состоит из изображения с некоторыми искаженными буквами на нем. Идея заключается в том, что только человек может читать буквы на изображении, в то время как алгоритмы OCR не справляются с этим.

Существует несколько преимуществ и недостатков этого подхода, но обсуждение этого подхода выходит за рамки этого руководства. Однако в наборе средств управления AJAX ASP.NET есть элемент управления, который обеспечивает аналогичный подход: NoBot Преодолеть это проще, чем CAPTCHA, но его очень легко использовать, и он показывает себя очень хорошо на таких веб-сайтах, как блоги, где успешным считается, если удается подавить большинство попыток спама, что NoBot система может сделать.

NoBot перехватывает обратную передачу текущей веб-формы ASP.NET, если выполняется по крайней мере одно из следующих условий:

  • Браузер не может решить головоломку JavaScript (например, при деактивации JavaScript)
  • Пользователь отправил форму быстро
  • IP-адрес клиента слишком часто отправляет форму в определенный период времени.

Чтобы проверить наличие этих условий, элемент NoBot управления требует этих атрибутов (все из них необязательные):

  • ResponseMinimumDelaySeconds минимальное количество секунд между обратными передачами
  • CutoffWindowSeconds длина интервала времени, в котором обратные передачи с одного IP-адреса измеряются
  • CutoffMaximumInstances максимальное количество секунд в интервал времени

Следующая разметка требует, чтобы между запросами проходило по крайней мере две секунды, и чтобы в течение 30 секунд было не более пяти запросов.

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

Затем, как обычно, убедитесь, что включили ScriptManager на страницу, чтобы загрузить библиотеку AJAX ASP.NET и работать с его пакетом элементов управления.

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

Так как большая часть проверок NoBot выполняется на стороне сервера, необходимо проверить результат этих проверок. Это можно сделать, вызвав NoBotIsValid() метод. Он имеет один аргумент (в качестве out параметра илиByRef параметра), который имеет тип NoBotState. Его строковое представление содержит причину сбоя проверки и Valid в противном случае. Следующий код выводит сообщение в соответствии с 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>

Наконец, вам нужна форма для отправки и элемента метки для вывода сообщения, и вы сделали это!

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

При запуске этого скрипта и деактивации JavaScript или отправке формы в течение первых двух секунд или отправки формы семь раз в течение тридцати секунд вы получите сообщение об ошибке. Однако используйте этот элемент управления мудро, так как только около 90-95% пользователей активировали JavaScript, поэтому для 5-10% пользователей тест NoBot не будет работать.

Это сообщение об ошибке может быть вызвано ботом

Это сообщение об ошибке может быть вызвано ботом (щелкните, чтобы просмотреть изображение полного размера)