Condividi tramite


Lotta contro i bot (C#)

di Christian Wenz

Scarica il PDF

I bot automatizzati in gesso weblog e altri siti Web con posta indesiderata, inviando moduli di commento senza alcuna interazione dell'utente. Il controllo NoBot nel ASP.NET AJAX Control Toolkit può aiutare a combattere tali bot.

Panoramica

I bot automatizzati in gesso weblog e altri siti Web con posta indesiderata, inviando moduli di commento senza alcuna interazione dell'utente. Il controllo NoBot nel ASP.NET AJAX Control Toolkit può aiutare a combattere tali bot.

Passaggi

Un approccio comune per sconfiggere i bot consiste nell'usare capTCHAs Completamente automatizzato test di Turing pubblico per indicare ai computer e agli esseri umani a parte. Un test di Turing è stato originariamente un test in cui qualcuno ha bisogno di decidere se un partner di comunicazione è un uomo o una macchina. Nel Web, un CAPTCHA in genere è costituito da un'immagine con alcune lettere distorte su di esso. L'idea è che solo un uomo può leggere le lettere sull'immagine, mentre gli algoritmi OCR avranno esito negativo.

Esistono diversi vantaggi e svantaggi per questo approccio, ma una discussione su questo argomento è oltre l'ambito di questa esercitazione. Esiste tuttavia un controllo nel ASP.NET AJAX Control Toolkit che fornisce un approccio simile: NoBot. È più facile superare un CAPTCHA, ma è molto facile da usare e fare molto bene su siti Web come blog in cui è considerato un successo se la maggior parte dei tentativi di posta indesiderata è sconfitta, che il NoBot controllo può fare.

NoBot intercetta il postback del modulo Web corrente ASP.NET 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 a veloce
  • L'indirizzo IP client ha inviato troppo spesso il modulo in un determinato periodo di tempo.

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

  • ResponseMinimumDelaySeconds quantità minima di secondi tra postback
  • CutoffWindowSeconds intervallo di tempo in cui i postback da un INDIRIZZO IP sono misure
  • 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 nella ScriptManager pagina in modo che la libreria AJAX ASP.NET sia caricata e il Toolkit di controllo possa essere usato:

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

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

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

Infine, è necessario un modulo per inviare e un elemento etichetta per restituire il messaggio e si è fatto!

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 avrà esito negativo 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 full-size)