Lotta contro i bot (C#)
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 postbackCutoffWindowSeconds
intervallo di tempo in cui i postback da un INDIRIZZO IP sono misureCutoffMaximumInstances
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 NoBot
il 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 NoBot
risultato 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 (Fare clic per visualizzare l'immagine full-size)