Compartilhar via


Bots de combate (C#)

por Christian Wenz

Baixar PDF

Os bots automatizados engessam weblogs e outros sites com spam, enviando formulários de comentários sem nenhuma interação do usuário. O controle NoBot no ASP.NET Kit de Ferramentas de Controle AJAX pode ajudar a combater esses bots.

Visão geral

Os bots automatizados engessam weblogs e outros sites com spam, enviando formulários de comentários sem nenhuma interação do usuário. O controle NoBot no ASP.NET Kit de Ferramentas de Controle AJAX pode ajudar a combater esses bots.

Etapas

Uma abordagem comum para derrotar bots é usar o teste CAPTCHAs Completely Automated Public Turing para diferenciar computadores e humanos. Um teste de Turing era originalmente um teste em que alguém precisava decidir se um parceiro de comunicação é um humano ou uma máquina. Na Web, um CAPTCHA geralmente consiste em uma imagem com algumas letras distorcidas nela. A ideia é que apenas um humano possa ler as letras na imagem, enquanto os algoritmos de OCR falharão.

Há várias vantagens e desvantagens nessa abordagem, mas uma discussão sobre isso está além do escopo deste tutorial. No entanto, há um controle no kit de ferramentas de controle AJAX ASP.NET que fornece uma abordagem semelhante: NoBot. É mais fácil de superar do que um CAPTCHA, mas é muito fácil de usar e se sai muito bem em sites como blogs onde é considerado um sucesso se a maioria das tentativas de spam for derrotada, o que o NoBot controle pode fazer.

NoBot intercepta o postback do formulário da Web ASP.NET atual se pelo menos uma dessas condições for atendida:

  • O navegador falha ao resolver um quebra-cabeça JavaScript (por exemplo, quando o JavaScript é desativado)
  • O usuário enviou o formulário para rapidamente
  • O endereço IP do cliente enviou o formulário com muita frequência em um determinado período de tempo.

Para marcar para essas condições, o NoBot controle requer esses atributos (todos opcionais):

  • ResponseMinimumDelaySeconds quantidade mínima de segundos entre postbacks
  • CutoffWindowSeconds intervalo de tempo em que postbacks de um IP são medidas
  • CutoffMaximumInstances quantidade máxima de segundos por intervalo de tempo

A marcação a seguir exige que pelo menos dois segundos se escorram entre postbacks e que haja apenas cinco postbacks ou menos em um intervalo de 30 segundos:

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

Em seguida, como de costume, inclua o ScriptManager na página para que a biblioteca ASP.NET AJAX seja carregada e o Kit de Ferramentas de Controle possa ser usado:

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

Como a maioria das verificações NoBot está ocorrendo no lado do servidor, você precisa marcar o resultado dessas validações. Isso pode ser feito chamando NoBoto método de .IsValid() Ele tem um argumento (como parâmetro out /ByRef parâmetro) que é do tipo NoBotState. Sua representação de cadeia de caracteres contém o motivo quando o marcar falha eValid, caso contrário, . O código a seguir gera uma mensagem de acordo com o NoBotresultado de :

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

Por fim, você precisa de um formulário para enviar e um elemento de rótulo para gerar a mensagem e pronto!

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

Ao executar esse script e desativar o JavaScript ou enviar o formulário nos dois primeiros segundos ou enviar o formulário sete vezes em trinta segundos, você receberá uma mensagem de erro. No entanto, use esse controle com sabedoria, já que apenas cerca de 90 a 95% dos usuários têm o JavaScript ativado, portanto, 5 a 10% dos usuários falharão NoBotno teste.

Essa mensagem de erro pode ter sido causada por um bot

Essa mensagem de erro pode ter sido causada por um bot (clique para exibir a imagem em tamanho real)