YUDA SUDRAJAT

yuda-sudrajat.blogspot.com

Pengertian:
NoBot adalah Ajax Control yang berfungsi untuk pencegahan spam atau bot tanpa membutuhkan intervensi dari user. Berbeda dari CAPTCHA yang menghendaki user untuk memasukan gambar yang tertera pada layar, NoBot bersifat invisible atau tidak terlihat oleh user, dan sama sekali tidak membutuhkan campur tangan user.

NoBot menggunakan teknik-teknik anti-bot berikut:

1. Membuat browser client menjalankan perhitungan JavaScript dan memverifikasi hasilnya sebagai bagian dari postback.

2. Mengatur jarak waktu antara request pertama dengan request selanjutnya (postback). Jika postback terjadi terlalu cepat, NoBot akan menampilkan pesan error.

3. Mengatur pembatasan jumlah akes yang bisa dilakukan oleh satu alamat IP.

Jika salah satu teknik anti-bot tersebut dilanggar (Maksudnya, jika yang mengakses situs bukan manusia), NoBot akan menampilkan pesan-pesan error seperti: posting back quickly, posting back many times, or disabling JavaScript in the browser.

Contoh implementasi NoBot:

Berikut ini adalah contoh sederhana implementasi NoBot Control pada situs untuk melakukan Log in.

Untuk contoh ini saya menggunakan bahasa VB.NET.

Halaman Default.aspx

Gb.1 Design View Default.aspx

Gambar di atas memperlihatkan desain view dari halaman Default.aspx yg dibuat. Pada desain view ini, saya memakai control Multiview dengan dua View. View 1 untuk login, dan view 2 untuk menampilkan status login. Selain itu saya juga menggunakan control label, textbox, button, dan tentu saja ScriptManager dan NoBot control.

SourceCode Default.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Untitled Pagetitle>

head>

<body>

<form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server">

asp:ScriptManager>

<div>

<asp:MultiView ID="MultiView1" runat="server">

<asp:View ID="View1" runat="server">

<table style="width:100%;">

<tr>

<td>

Usernametd>

<td>

<asp:TextBox ID="txtUsername" runat="server">Usernameasp:TextBox>

td>

<td>

td>

tr>

<tr>

<td>

Passwordtd>

<td>

<asp:TextBox ID="txtPassword" runat="server">passwordasp:TextBox>

td>

<td>

td>

tr>

<tr>

<td>

td>

<td>

<asp:Button ID="btnLogin" runat="server" Text="Login" />

td>

<td>

td>

tr>

table>

asp:View>

<asp:View ID="View2" runat="server">

<asp:Label ID="lblStatus" runat="server">asp:Label>

<br />

<asp:Label ID="Label2" runat="server">asp:Label>

<br />

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default.aspx">TryAgainasp:HyperLink>

asp:View>

asp:MultiView>

<cc1:NoBot ID="NoBot1" runat="server" OnGenerateChallengeAndResponse="CustomChallengeResponse" />

div>

form>

body>

html>

Halaman Default.aspx.vb

Imports AjaxControlToolkit

Imports System.Collections.Generic

Partial Class _Default

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If (IsPostBack) Then 'Jika postback, tampilkan view3, jika tidak, tampilkan view 1

MultiView1.SetActiveView(View2)

Dim state As NoBotState

If (NoBot1.IsValid(state)) Then

lblStatus.BackColor = Drawing.Color.White 'jika isValid, lblStatus menmapilkan login sukses

lblStatus.Text = "Login sukses.
Request: "
+ state.ToString()

Else

lblStatus.BackColor = Drawing.Color.Red 'jika tidak isValid, login ditolak, warna backcolor merah

lblStatus.Text = "Login Ditolak.
Request: "
+ state.ToString()

End If

Dim sb As New StringBuilder

For Each kvp As KeyValuePair(Of DateTime, String) In NoBot.GetCopyOfUserAddressCache()

sb.AppendFormat("{0}: {1}
"
, kvp.Key.ToString("u"), kvp.Value)

Next

Label2.Text = sb.ToString() 'menampilkan tanggal dan ip

Else

MultiView1.SetActiveView(View1) ' view1

End If

End Sub

Protected Sub CustomChallengeResponse(ByVal sender As Object, ByVal e As NoBotEventArgs)

Dim p As New Panel

p.ID = "NoBotSamplePanels"

Dim rand As New Random

p.Width = rand.Next(300)

p.Height = rand.Next(200)

p.Style.Add(HtmlTextWriterStyle.Visibility, "hidden")

p.Style.Add(HtmlTextWriterStyle.Position, "absolute")

sender.Controls.Add(p)

e.ChallengeScript = "vae e = documents.getElementById('" + p.ClientID + "');e.offsetwidth*e.offsetHeight;"

e.RequiredResponse = (p.Height.Value * p.Width.Value).ToString()

End Sub

End Class

Screenshots Halman Jadi

Gb2. Halaman Login

Gambar di atas adalah halaman login dimana user bisa memasukan username dan password pada field yang disediakan. Jika verifikasi oleh NoBot Control sukses, maka akan muncul gambar di bawah.

Gb.3 Login Sukses

Gambar di atas menampilkan pesan "Login Sukses" jika NoBot tidak menemukan adanya pelanggaran yang dilakukan oleh user, seperti login terlalu cepat, javascript browser tidak aktif, dll.

Gb 4. Login ditolak

Namun pada gambar di atas, jika user mencoba login lagi pada waktu kurang dari 3 detik (Saya set ResponseMinimumDelaySeconds = 2 detik) , maka NoBot akan mengaggap user bukanlah manusia, dan menampilkan pesan InvalidResponseTooSoon

Untuk lebih jelasnya, berikut ini saya lampirkan sourcecode lengkap program di atas.

Terima kasih.



0 comments

Post a Comment

Post a Comment

Tentang Saya

Jakarta, DKI Jakarta, Indonesia
gw orangnya Ambisius, Ulet, Tegar, Intuitif, dan Sopan. Kalo disingkat: A U T I S

Yahoo! Messenger