Sdílet prostřednictvím


Boj s roboty (C#)

Christian Wenz

Stáhnout PDF

Automatizovaný robot osádí weblogy a další weby spamem a odesílají formuláře komentářů bez zásahu uživatele. Ovládací prvek NoBot v sadě nástrojů ASP.NET AJAX Control Toolkit vám může pomoct v boji s těmito roboty.

Přehled

Automatizovaný robot osádí weblogy a další weby spamem a odesílají formuláře komentářů bez zásahu uživatele. Ovládací prvek NoBot v sadě nástrojů ASP.NET AJAX Control Toolkit vám může pomoct v boji s těmito roboty.

Postup

Jedním z běžných přístupů k porazit roboty je použití zcela automatizovaného veřejného turingového testu CAPTCHA k oddělování počítačů a lidí. Turingový test byl původně test, při kterém se někdo musel rozhodnout, jestli je komunikačním partnerem člověk nebo stroj. Na webu se captcha obvykle skládá z obrázku s několika zkreslenými písmeny. Myšlenka je taková, že písmena na obrázku může číst jenom člověk, zatímco algoritmy OCR selžou.

Tento přístup má několik výhod a nevýhod, ale diskuze o tom je nad rámec tohoto kurzu. V ASP.NET AJAX Control Toolkit je však ovládací prvek, který poskytuje podobný přístup: NoBot. Je to jednodušší překonat než CAPTCHA, ale je velmi snadno použitelný a funguje velmi dobře na webových stránkách, jako jsou blogy, kde je považován za úspěch, pokud je většina pokusů o spam poražena, což NoBot kontrola může udělat.

NoBot zachytí zpětné odeslání aktuálního webového formuláře ASP.NET, pokud je splněna alespoň jedna z těchto podmínek:

  • Prohlížeči se nepodaří vyřešit javascriptovou hádanku (například při deaktivaci JavaScriptu).
  • Uživatel odeslal formulář k rychlému odeslání
  • IP adresa klienta odeslala formulář příliš často v určitém časovém období.

Ke kontrole těchto podmínek NoBot ovládací prvek vyžaduje tyto atributy (všechny jsou volitelné):

  • ResponseMinimumDelaySeconds minimální doba v sekundách mezi postbacky
  • CutoffWindowSeconds délka časového intervalu, ve kterém jsou míry zpětného odeslání z jedné IP adresy
  • CutoffMaximumInstances maximální počet sekund za časový interval

Následující přirážka vyžaduje, aby mezi zpětnými operacemi uplynuly alespoň dvě sekundy a aby v intervalu 30 sekund bylo pouze pět nebo méně zpětného odeslání:

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

Pak jako obvykle nezapomeňte na stránce zahrnout ScriptManager , aby se knihovna ASP.NET AJAX načetla a bylo možné použít Sadu nástrojů Control Toolkit:

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

Vzhledem k tomu, že většina kontrol NoBot probíhá na straně serveru, musíte zkontrolovat výsledek těchto ověření. To lze provést voláním NoBotmetody .IsValid() Má jeden argument (jako out parametr neboByRef parametr), který je typu NoBotState. Její řetězcová reprezentace obsahuje důvod, kdy kontrola selže a Valid jinak. Následující kód vypíše zprávu podle NoBotvýsledku :

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

Nakonec potřebujete formulář k odeslání a element label pro výstup zprávy a máte hotovo!

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

Když spustíte tento skript a deaktivujete JavaScript nebo odešlete formulář během prvních dvou sekund nebo odešlete formulář sedmkrát do třiceti sekund, zobrazí se chybová zpráva. Tento ovládací prvek ale používejte moudře, protože javascript má aktivovaných pouze 90–95 % uživatelů, takže 5–10 % uživatelů test neprojde NoBot.

Tuto chybovou zprávu mohl způsobit robot.

Tuto chybovou zprávu mohl způsobit robot (kliknutím zobrazíte obrázek v plné velikosti).