Борьба с ботами (C#)
Кристиан Венц (Christian Wenz)
Автоматические боты заполняют веб-журналы и другие веб-сайты спамом, отправляя формы комментариев без какого-либо взаимодействия с пользователем. Элемент управления 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
выполняется на стороне сервера, необходимо проверка результат этих проверок. Это можно сделать, вызвав NoBot
IsValid()
метод . Он имеет один аргумент (в 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>
Наконец, вам потребуется форма для отправки и элемент 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
тест.
Это сообщение об ошибке могло быть вызвано ботом (щелкните, чтобы просмотреть полноразмерное изображение)