Condividi tramite


Combattimento dei bot (VB)

di Christian Wenz

Scaricare il PDF

I bot automatizzati ricoprono i weblog e altri siti Web con spam, compilando moduli di commento senza alcuna interazione da parte dell'utente. Il controllo NoBot nel ASP.NET AJAX Control Toolkit può aiutare a combattere tali bot.

Informazioni generali

I bot automatizzati ricoprono i weblog e altri siti Web con spam, compilando moduli di commento senza alcuna interazione da parte dell'utente. Il controllo NoBot nel ASP.NET AJAX Control Toolkit può aiutare a combattere tali bot.

Gradi

Un approccio comune per sconfiggere i bot consiste nell'usare i CAPTCHA, ovvero un test di Turing pubblico completamente automatizzato per distinguere tra computer ed esseri umani. Un test Turing è stato originariamente un test in cui qualcuno doveva decidere se un partner di comunicazione è un essere umano o una macchina. Nel Web, un CAPTCHA di solito è costituito da un'immagine con alcune lettere distorte su di esso. L'idea è che solo un essere umano può leggere le lettere sull'immagine, mentre gli algoritmi OCR avranno esito negativo.

Esistono diversi vantaggi e svantaggi per questo approccio, ma una descrizione di questo approccio non rientra nell'ambito di questa esercitazione. Esiste tuttavia un controllo nel ASP.NET AJAX Control Toolkit che offre un approccio simile: NoBot. È più facile superare rispetto a un CAPTCHA, ma è molto facile da usare e funziona estremamente bene su siti web come i blog, dove è considerato un successo se la maggior parte dei tentativi di spam sono sconfitti, cosa che il NoBot può fare.

NoBot intercetta il postback del modulo Web ASP.NET corrente se viene soddisfatta almeno una di queste condizioni:

  • Il browser non riesce a risolvere un puzzle JavaScript (ad esempio quando JavaScript è disattivato)
  • L'utente ha inviato il modulo troppo rapidamente
  • L'indirizzo IP client ha inviato il modulo troppo spesso in un determinato periodo di tempo.

Per verificare la presenza di queste condizioni, il NoBot controllo richiede questi attributi (tutti facoltativi):

  • ResponseMinimumDelaySeconds quantità minima di secondi tra i postback
  • CutoffWindowSeconds intervallo di tempo in cui i postback da un IP vengono monitorati
  • CutoffMaximumInstances quantità massima di secondi per intervallo di tempo

Il markup seguente richiede che siano trascorsi almeno due secondi tra postback e che siano presenti solo cinque postback o meno entro un intervallo di 30 secondi:

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

Quindi, come di consueto, assicurarsi di includere ScriptManager nella pagina in modo che la libreria ASP.NET AJAX venga caricata e che sia possibile usare Control Toolkit:

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

Poiché la maggior parte dei controlli NoBot viene eseguita sul lato server, è necessario controllare il risultato di queste convalide. Questa operazione può essere eseguita chiamando NoBotil metodo di IsValid() . Ha un solo argomento (come out parametro/ByRef parametro) di tipo NoBotState. La relativa rappresentazione di stringa contiene il motivo quando il controllo ha esito negativo e Valid in caso contrario. Il codice seguente restituisce un messaggio in base al NoBotrisultato:

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

Infine, è necessario un modulo per l'invio e un elemento label per visualizzare il messaggio, e hai finito!

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

Quando si esegue questo script e si disattiva JavaScript o si invia il modulo entro i primi due secondi o si invia il modulo sette volte entro trenta secondi, verrà visualizzato un messaggio di errore. Tuttavia, usare questo controllo in modo saggio, poiché solo il 90-95% degli utenti ha attivato JavaScript, pertanto il 5-10% degli utenti non supererà il test di NoBot.

Questo messaggio di errore potrebbe essere stato causato da un bot

Questo messaggio di errore potrebbe essere stato causato da un bot (fare clic per visualizzare l'immagine a dimensione intera)