摘要:[ASP.NET] reCAPTCHA 驗證服務 - Web使用者控制項 - Code Behind
驗證碼早期應用在帳號申請時,現在則在很多時後都會出現,包括下載、網路投票...等等應用,整個文字的擾亂複雜程度也越來越好。這樣的功能跟資安一樣有做防護一定比不做來得更好的多。是的~今天要說的就是防堵機器人軟體,以驗證服務來做。
Google 於2009年9月17日買下了美國卡內基美隆大學所研發的ReCAPTCHA,目的是為了數位化應用還有......布啦布啦。
本篇摘要:
- 環境基本需求
- 以 Google 建議的方式來使用
- 以 Web使用者控制項來增加重複使用元件的彈性,並以 Code Behind 方式來寫後續的判斷碼
-
首先連到 reCAPTCHA 去註冊你的網站,並取的 Public Key 與 Private Key
若你沒有網域名稱,你可以到網路上去找免費的DNS註冊一個,或是連到「No-IP」去註冊。 - 下載你所使用程式語言的函示庫
- 在你的專案裡加入 reCAPTCHA 函示庫的參考(reference)
--- 以 Google 建議的方式來使用 ---
↓ 接著連到網站去看建議的參考程式碼
<%@ Page Language="VB"%> <%@ Register TagPrefix="recaptcha" Namespace="Recaptcha"Assembly="Recaptcha" %> <script runat=server> Sub btnSubmit_Click(ByVal sender As Object, ByVal 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 還有 clean、white、blackglass --%> <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 Object, ByVal 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 Object, ByVal 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:
- Using reCAPTCHA with ASP.NET
- 免費註冊DNS No-IP
- 指示詞用法
- 安裝WP-reCAPTCHA讓全部的blog均可以適用的antispam
- How to implement Captcha in ASP.Net
- Google reCAPTCHA in a BizForm : tutorial
- [ASP.NET]幫Login加上驗證碼 Topcat
- reCAPTCHA (免費的 CAPTCHA 驗證服務) Will 保哥