Поделиться через


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

Кристиан Венц (Christian Wenz)

Загрузить PDF-файл

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

Общие сведения

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

Этапы

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

У этого подхода есть несколько преимуществ и недостатков, но обсуждение этого подхода выходит за рамки область этого руководства. Однако в наборе средств управления ASP.NET AJAX есть элемент управления, который предоставляет аналогичный подход: 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 на страницу , чтобы загрузить библиотеку ASP.NET AJAX и можно использовать набор средств управления:

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

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

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

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

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тест.

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

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