Membuat Anti Spam di ASP.NET

Internet memberikan kebebasan informasi, kemudahan akses dan mempengaruhi kehidupan manusia. Bersamaan dengan kebebasan aliran informasi muncullah berbagai SPAM, blog SPAM, newsgroups SPAM, email SPAM dan lainnya. Untuk menghadang laju spam ini diciptakanlah CAPTCHA. CAPTCHA merupakan program yang digunakan untuk memastikan bahwa jawaban diberikan oleh manusia bukan dari program komputer.

Tehnik captcha atau anti spam yang umum digunakan adalah menggunakan gambar. Dengan gambar maka spam tidak bisa membaca karakter yang ada pada gambar. Program berikut adalah contoh membuat anti spam menggunakan gambar. Program ini originalnya menggunakan bahasa C# dan dimuat di Code Project , dan aku modifikasi menjadi VB.NET
Secara garis besar, alur programnya adalah sebagai berikut.

  • Buat string acak dan simpan dalam session.
  • Ubah string acak ini dalam bentuk gambar.
  • Tampilkan gambar
  • Cek input yang dilakukan user.

Membuat String acak

Private Function GenerateRandomCode() As String
   Dim builder As New StringBuilder()
   Dim random As New Random()
   Dim ch As Char
   Dim i As Integer
   Dim kode As Char
   For i = 0 To 5
      kode = Convert.ToChar(Convert.ToInt32(3 * random.NextDouble() + 48))
      Select Case kode
         Case "0"
            ch = Convert.ToChar(Convert.ToInt32((25 * random.NextDouble() + 97)))
         Case "1"
            ch = Convert.ToChar(Convert.ToInt32((25 * random.NextDouble() + 65)))
         Case Else
            ch = Convert.ToChar(Convert.ToInt32((9 * random.NextDouble() + 48)))
      End Select
   builder.Append(ch)
   Next
   Return builder.ToString()
End Function

Mengubah String Menjadi Gambar

Private Sub GenerateImage()
   Dim bitmap As Bitmap = New Bitmap(Me.width, Me.height, _
   PixelFormat.Format32bppPArgb)

   'buat bingkai
   Dim g As Graphics = Graphics.FromImage(bitmap)
   g.SmoothingMode = SmoothingMode.AntiAlias
   Dim r As Rectangle = New Rectangle(0, 0, Me.width, Me.height)

   'buat background
   Dim hb As HatchBrush = New HatchBrush(HatchStyle.SmallConfetti, _
     Color.LightGray, Color.White)
   g.FillRectangle(hb, r)

   'set teks font
   Dim size As SizeF
   Dim ukuranFont As Single = r.Height + 1
   Dim nmFont As Font

   'atur ukuran font agar tepat sesuai dg box image
   Do
      ukuranFont -= 1
      nmFont = New Font(Me.fontName, ukuranFont, FontStyle.Bold)
      size = g.MeasureString(Me.text, nmFont)
   Loop While size.Width > r.Width

   'format teks
   Dim format As StringFormat = New StringFormat()
   format.Alignment = StringAlignment.Center
   format.LineAlignment = StringAlignment.Center

   Dim path As GraphicsPath = New GraphicsPath()
   path.AddString(Me.text, nmFont.FontFamily, CType(nmFont.Style, Integer), _
     nmFont.Size, r, format)
   Dim v As Single = 4.0F
   Dim poins() As PointF = {New PointF(Me.acak.Next(r.Width) / v, Me.acak.Next(r.Height) / v), _
     New PointF(r.Width - Me.acak.Next(r.Width) / v, Me.acak.Next(r.Height) / v), _
     New PointF(Me.acak.Next(r.Width) / v, r.Height - Me.acak.Next(r.Height) / v), _
     New PointF(r.Width - Me.acak.Next(r.Width) / v, r.Height - Me.acak.Next(r.Height) / v)}
   Dim matrik As Matrix = New Matrix()
   matrik.Translate(0, 0)
   path.Warp(poins, r, matrik, WarpMode.Perspective, 0)

   'gambar teks
   hb = New HatchBrush(HatchStyle.ZigZag, Color.LightGray, Color.Blue)
   g.FillPath(hb, path)

   'bintik2 acak
   Dim m As Integer = Math.Max(r.Width, r.Height)
   For i As Integer = 0 To (r.Width * r.Height / 30.0F)
      Dim x As Integer = Me.acak.Next(r.Width)
      Dim y As Integer = Me.acak.Next(r.Height)
      Dim w As Integer = Me.acak.Next(m / 50)
      Dim h As Integer = Me.acak.Next(m / 50)
      g.FillEllipse(hb, x, y, w, h)
   Next

   'bersih-bersih
   nmFont.Dispose()
   hb.Dispose()
   g.Dispose()
   Me.image = bitmap
End Sub

Menampilkan Gambar.

Buat 2 file aspx. Gambar yang terbentuk ditampilkan di file aspx kedua dengan menyisipkan kode berikut di method Page Load

Dim gbAs As AntiSpam = New AntiSpam(Session("KODESPAM").ToString(), 200, 50)
Me.Response.Clear()
Me.Response.ContentType = "image/jpeg"
gbAs.image.Save(Me.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
gbAs.Dispose()

Dari file aspx pertama, panggil file aspx kedua di ImageWebControl

Image1.ImageUrl = "default2.aspx"

Untuk contoh kode vb.NET selengkapnya dapat di download disini.
Kode original menggunakan C# dapat di download disini

Happy Coding…

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 17 Agustus 2009, in ASP.net and tagged , , . Bookmark the permalink. 7 Komentar.

  1. terima kasih buat share’y.
    membantu saya yang sedang belajar asp.NET

  2. mas saya mau tanya. saya tempel captcha’y untuk form registrasi dan form login. ketika d form login tidak bisa terkirim session captcha’y. gimana ya cara’y?

  3. kang boleh kirim contoh u/ vb.net g’???
    link di atas dah g’ bisa… kirim ke email sy aja ych…
    wawanchoy05@gmail[dot]com

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: