Mücadele Botları (C#)
Christian Wenz tarafından
Otomatik botlar web günlüklerini ve diğer web sitelerini istenmeyen posta ile alır, herhangi bir kullanıcı etkileşimi olmadan yorum formları gönderir. ASP.NET AJAX Denetim Araç Seti'ndeki NoBot denetimi bu botlarla mücadeleye yardımcı olabilir.
Genel Bakış
Otomatik botlar web günlüklerini ve diğer web sitelerini istenmeyen posta ile alır, herhangi bir kullanıcı etkileşimi olmadan yorum formları gönderir. ASP.NET AJAX Denetim Araç Seti'ndeki NoBot denetimi bu botlarla mücadeleye yardımcı olabilir.
Adımlar
Botları yenmeye yönelik yaygın yaklaşımlardan biri, Bilgisayarlara ve İnsanlara Ayrı Olduğunu söylemek için CAPTCHAs Tamamen Otomatik Genel Turing testini kullanmaktır. Turing testi aslında bir iletişim ortağının insan mı yoksa makine mi olduğuna karar vermesi gereken bir testti. Web'de CAPTCHA genellikle üzerinde bazı bozuk harfler bulunan bir görüntüden oluşur. Fikir, görüntüdeki harfleri yalnızca bir insanın okuyabileceği, ancak OCR algoritmalarının başarısız olacağıdır.
Bu yaklaşımın çeşitli avantajları ve dezavantajları vardır, ancak bunun bir tartışması bu öğreticinin kapsamı dışındadır. Ancak ASP.NET AJAX Denetim Araç Seti'nde benzer bir yaklaşım sağlayan bir denetim vardır: NoBot
. CapTCHA'nın üstesinden gelmekten daha kolaydır, ancak kullanımı çok kolaydır ve çoğu istenmeyen posta girişimi yenilirse başarı olarak kabul edilen bloglar gibi web sitelerinde son derece iyidir ve NoBot
kontrol tarafından yapılabilir.
NoBot
bu koşullardan en az biri karşılanırsa geçerli ASP.NET web formunun geri göndermesini durdurur:
- Tarayıcı bir JavaScript bulmacasını çözemiyor (örneğin, JavaScript devre dışı bırakıldığında)
- Kullanıcı formu hızlı bir şekilde gönderdi
- İstemci IP adresi formu belirli bir süre içinde çok sık gönderdi.
Bu koşulları denetlemek için denetim NoBot
bu öznitelikleri gerektirir (tümü isteğe bağlı):
ResponseMinimumDelaySeconds
geri göndermeler arasındaki minimum saniye miktarıCutoffWindowSeconds
bir IP'den geri göndermelerin ölçü olduğu zaman aralığı uzunluğuCutoffMaximumInstances
zaman aralığı başına en fazla saniye miktarı
Aşağıdaki işaretleme, geri göndermeler arasında en az iki saniyenin geçmesini ve 30 saniyelik bir aralık içinde yalnızca beş veya daha az geri göndermenin olması gerekir:
<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />
Ardından her zamanki gibi, ASP.NET AJAX kitaplığının yüklenmesi ve Denetim Araç Seti'nin kullanılabilmesi için öğesini sayfaya eklediğinizden ScriptManager
emin olun:
<asp:ScriptManager ID="asm" runat="server" />
Denetimlerin NoBot
çoğu sunucu tarafında yapıldığından, bu doğrulamaların sonucunu denetlemeniz gerekir. Bu, 'nin IsValid()
yöntemi çağrılarak NoBot
yapılabilir. türünde NoBotState
bir out
bağımsız değişkeni (parametre/ByRef
parametre olarak) vardır. Dize gösterimi, denetimin başarısız olmasının nedenini ve Valid
aksini içerir. Aşağıdaki kod, sonucuna NoBot
göre bir ileti çıkışı oluşturur:
<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>
Son olarak, göndermek için bir forma ve iletinin çıktısını almak için bir etiket öğesine ihtiyacınız var ve işiniz bitti!
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" />
Bu betiği çalıştırıp JavaScript'i devre dışı bıraktığınızda veya formu ilk iki saniye içinde gönderdiğinizde ya da otuz saniye içinde yedi kez gönderdiğinizde bir hata iletisi alırsınız. Ancak kullanıcıların yalnızca %90-95'i JavaScript'i etkinleştirdiğinden, kullanıcıların %5-10'u testi başarısız NoBot
olacağından bu denetimi akıllıca kullanın.
Bu hata iletisine bir bot neden olmuş olabilir (Tam boyutlu görüntüyü görüntülemek için tıklayın)