[ASP.NET] reCAPTCHA 驗證服務 - Web使用者控制項 - Code Behind

摘要:[ASP.NET] reCAPTCHA 驗證服務 - Web使用者控制項 - Code Behind

 

  驗證碼早期應用在帳號申請時,現在則在很多時後都會出現,包括下載、網路投票...等等應用,整個文字的擾亂複雜程度也越來越好。這樣的功能跟資安一樣有做防護一定比不做來得更好的多。是的~今天要說的就是防堵機器人軟體,以驗證服務來做。

Google 於2009年9月17日買下了美國卡內基美隆大學所研發的ReCAPTCHA,目的是為了數位化應用還有......布啦布啦。

本篇摘要:

  • 環境基本需求
  • 以 Google 建議的方式來使用
  • 以 Web使用者控制項來增加重複使用元件的彈性,並以 Code Behind 方式來寫後續的判斷碼
------------------------------------------------------
Google reCAPTCHA 提供了五種程式語言的函示庫PHPASP.NETClassic ASPJava/JSPPerl),供這些語言可以呼叫應用 reCAPTCHA。
 
而我主要是寫ASP.NET當然以這個來做說明囉。下載 recaptcha-dotnet-1.0.5.0-binary.zip 
 
--- 環境基本需求 ---
  1. 首先連到 reCAPTCHA 去註冊你的網站,並取的 Public Key 與 Private Key
    若你沒有網域名稱,你可以到網路上去找免費的DNS註冊一個,或是連到「No-IP」去註冊。
  2. 下載你所使用程式語言的函示庫
  3. 在你的專案裡加入 reCAPTCHA 函示庫的參考(reference)

 
↓ 以網域名稱去 reCAPTCHA 註冊後,你就會得到下圖中的 Public Key 與 Private Key,這2個KEY請記起來,待會程式裡需要用到。

 

--- 以 Google 建議的方式來使用 --- 

↓ 接著連到網站去看建議的參考程式碼

 

<%@ Page Language="VB"%>
<%
@ Register TagPrefix="recaptcha"  Namespace="Recaptcha"Assembly="Recaptcha"  %>
<script runat=server>
   Sub btnSubmit_Click(ByVal sender As ObjectByVal e As EventArgs)
      If Page.IsValid Then
         lblResult.Text = "
驗證成功"
         lblResult.ForeColor = Drawing.Color.Green
      Else
         lblResult.Text = "
喔喔~輸入錯誤了唷"
         lblResult.ForeColor = Drawing.Color.Red
      End If
   End Sub
</
script>
<
html>
<
body>
   <form runat="server">
      <asp:Label Visible=true ID="lblResult" runat="server" />
      <recaptcha:RecaptchaControl
         ID="recaptcha"
         runat="server"
         Theme="red"
         PublicKey="這邊要換Google reCAPTCHA 給你的 PublicKey"
         PrivateKey="這邊要換Google reCAPTCHA 給你的 -- Private Key --" />
<%-- 
樣版除了 red 還有 cleanwhiteblackglass --%>
      <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
         OnClick="btnSubmit_Click" Height="22px" Width="90px" />
      <br />
   </form>
</
body>
</
html>

 

 

↑↑↑ 上面的程式碼除了必要的修改 Public Key 與 Private Key 值,其實只要複製、貼上就搞定了,不過 Label lblResult 預設 Visible 是 False,所以不管輸入的對不對都看不出來,建議把他改為 True 至少再開發階段,能判斷自己是否輸入正確

↓ 提示的文字當然也可以改一下囉

上面的方法大家都會其實也不用我多贅述,但是這樣的方法對於寫習慣 Code Behind 的我來說,實在很不習慣,很少把 Button 的動作寫在前端 aspx ,除非是改舊的 ASP 程式,所以來把他改寫一下

--- 以 Web使用者控制項來增加重複使用元件的彈性,並以 Code Behind 方式來寫後續的判斷碼 ---

這麼好用、常用的功能,最好當然是寫成元件來應用

↓ 選擇新增「Web 使用者控制項」(註:因為我的版本是 VS Web Developer 2008 Express 所以看到的項目很少,可能跟你的不一樣)

↓ 副檔名 ascx 跟一般的 aspx 不一樣



↓ 前端 xx.ascx 的程式碼(下面程式碼中的 Public / Private Key 請換成你註冊後得到的碼,直接貼上是不能用的,因為我把KEY剪一段掉了。檔名的部份也記得連帶修改唷!把 xRecaptcha 都換成你取的檔案名稱

 

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="xRecaptcha.ascx.vb"Inherits="capt.xRecaptcha" %>
<%
@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
<recaptcha:RecaptchaControl
    ID="recaptcha"
    runat="server"
    PublicKey="6LcUUcASAAAAAMPQZcQI8FHz7"
    PrivateKey="6LcUUcASAAAAAADbDJO0Odi3R"
    Theme="red" />

 

↓ 後端 Code Behind xx.ascx.vb 的程式碼檔名的部份記得連帶修改唷!把 xRecaptcha 都換成你取的檔案名稱

 

Public Partial Class xRecaptcha
  Inherits System.Web.UI.UserControl
  Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) HandlesMe.Load
  End Sub

  Public
 Function xvaild() As Boolean
     Page.Validate()
     If Page.IsValid Then
      'Response.Write("OK~OK~")
       Return True
     Else
      'Response.Write("NO~NO~......")
       Return False
     End If
End
 Function
End
 Class

 

↑↑↑↑元件做好了↑↑↑↑

那在程式裡怎麼應用?怎麼呼叫呢?

↓ 在前端直接把 ascx 拉過來放到你要顯示的位置就可以了

他就會在 aspx 裡放入

 

'表頭宣告
<%@ Register src="xRecaptcha.ascx" tagname="xRecaptcha" tagprefix="uc1" %>

'
表單裡放入元件的宣告
<form id="form1" runat="server">
<
div> <uc1:xRecaptcha ID="xRecaptcha1" runat="server" /> </div>
</
form>

 

後端的程式 xx.aspx.vb 判斷方式,我是簡化放在 Page_Load 至於實際應用放哪就隨你囉

 

Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) HandlesMe.Load
   If IsPostBack Then
      
'
 xRecaptcha1.xvaild 去呼叫判斷是否輸入正確
      If xRecaptcha1.xvaild = True Then
         Response.Write("OK.OK...")
      Else
         Response.Write("NO.No.No...")
      End If
   End If
End
 Sub

 

用 IsPostBack 判斷是必要的,不然第一次進入就會得到 True 的結果

Reference: