Combatir los bots (VB)

por Christian Wenz

Descargar PDF

Bots automatizados llenan blogs y otros sitios web de correo no deseado, enviando formularios de comentarios sin ninguna interacción del usuario. El control NoBot en ASP.NET AJAX Control Toolkit puede ayudar a luchar contra esos bots.

Información general

Bots automatizados llenan blogs y otros sitios web de correo no deseado, enviando formularios de comentarios sin ninguna interacción del usuario. El control NoBot en ASP.NET AJAX Control Toolkit puede ayudar a luchar contra esos bots.

Pasos

Un enfoque común para derrotar a los bots es usar CAPTCHA (prueba pública de Turing completamente automatizada para distinguir equipos de humanos). Una prueba de Turing era originalmente una prueba en la que alguien tenía que decidir si un asociado de comunicación era un humano o una máquina. En la web, un CAPTCHA normalmente consta de una imagen que contiene algunas letras distorsionadas. La idea es que solo un humano pueda leer las letras de la imagen, mientras que los algoritmos de OCR producirán un error.

Este enfoque tiene varias ventajas y desventajas, pero una explicación de esto está fuera del ámbito de este tutorial. Sin embargo, hay un control en ASP.NET AJAX Control Toolkit que proporciona un enfoque similar: NoBot. Es más fácil de superar que un CAPTCHA, pero es muy fácil de usar y funciona extremadamente bien en sitios web como blogs, donde se considera un éxito que la mayoría de los intentos de correo no deseado sean derrotados, cosa que el control NoBot puede hacer.

NoBot intercepta el postback del formulario web de ASP.NET actual si se cumple al menos una de estas condiciones:

  • El explorador no puede resolver un rompecabezas de JavaScript (por ejemplo, cuando JavaScript está desactivado).
  • El usuario envió el formulario demasiado rápido
  • La dirección IP del cliente envió el formulario con demasiada frecuencia en un período de tiempo determinado.

Para comprobar estas condiciones, el control NoBot requiere estos atributos (todos ellos opcionales):

  • ResponseMinimumDelaySeconds cantidad mínima de segundos entre postbacks
  • CutoffWindowSeconds duración del intervalo de tiempo en el que los postbacks de una dirección IP son medidos
  • CutoffMaximumInstances cantidad máxima de segundos por intervalo de tiempo

El marcado siguiente exige que transcurran al menos dos segundos entre postbacks y que solo haya cinco postbacks o menos en un intervalo de 30 segundos:

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

A continuación, como de costumbre, asegúrese de incluir ScriptManager en la página para que se cargue la biblioteca ASP.NET AJAX y se pueda usar el Control Toolkit:

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

Dado que la mayoría de las comprobaciones que NoBot realiza se producen en el lado servidor, debe comprobar el resultado de estas validaciones. Esto se puede hacer llamando al método IsValid() de NoBot. Tiene un argumento (como parámetro out / parámetro ByRef) que es de tipo NoBotState. Su representación de cadena contiene el motivo cuando se produce un error en la comprobación y cuando, de lo contrario, es Valid. El código siguiente genera un mensaje según el resultado de 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>

Por último, necesita un formulario para enviar y un elemento de etiqueta para generar el mensaje, y ya ha terminado.

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

Cuando ejecute este script y desactive JavaScript o envíe el formulario en los primeros dos segundos o envíe el formulario siete veces en un plazo de treinta segundos, recibirá un mensaje de error. Sin embargo, use este control sabiamente, ya que solo el 90-95 % de los usuarios tienen activado JavaScript. Por lo tanto, el 5-10 % de los usuarios no superará la prueba NoBot.

This error message could have been caused by a bot

Este mensaje de error podría deberse a un bot (haga clic para ver la imagen a tamaño completo).