Subkismet captcha for CommunityServer or ASP.Net

Saturday, 6 February 2010 03:41 by admin

現在一位網站管理員,除了要管理真人的內容外,對付廣告機器人也是一件頭痛的問題,各大網站相繼淪陷於廣告機器人之後,就有網站陸續加入認證圖案,這時就造就了 CAPTCHA ( 詳細解釋請見 Wiki )

不論你網站規模大小,有沒有流量等等,總是會有一些廣告機器人滲透,CommunityServer 只要開了匿名留言,自然也會成為攻擊對象,於 .Net 2.0 中,要寫一個 CAPTCHA 並不困難,相對的網路上的免費資源也不少,這次就介紹 Subkismet ,Captcha 只是 Subkismet 專案的一部分,做出來的 Captcha 會是由點狀顯示文字 (如下圖),對於一般(亞洲)人辨識並不至於太困難,例如 reCaptcha 這個對於亞洲人來說就太過困難

 

Subkismet 主要分為兩部分,HttpHandler 與 CaptchaControl , HttpHandler 是負責產生圖形, CaptchaControl 負責編碼與驗證,在使用前請先完成設定作業

1. Web.config 加入 <add verb="*" path="*CaptchaImage.ashx" type="Subkismet.Captcha.CaptchaImageHandler, Subkismet"/>

2. 在使用的頁面開頭註冊元件 <%@ Register Assembly="Subkismet" Namespace="Subkismet.Captcha" TagPrefix="sbk" %>

完成要使用 CaptchaControl 其實很簡單,因為他是繼承 System.Web.UI.WebControls.BaseValidator ,設定好後直接放入以下程式碼到輸出表單中

<sbk:CaptchaControl id="captcha" runat="server" ErrorMessage="Oops! You must be bad at reading." Display="dynamic" CaptchaLength="4" ValidationGroup="Visible" />

 

CommunityServer Blog 使用方法範例 ( 以 default2 為例 ):

1. 開啟 \Themes\Blogs\default2\post.aspx

2. 於頁面最上方註冊 Subkismet.Captcha 元件 <%@ Register Assembly="Subkismet" Namespace="Subkismet.Captcha" TagPrefix="sbk" %>

3. 在留言的下方加入 Subkimet Captcha

<dt><CSControl:FormLabel LabelForId="tbComment" runat="server" ResourceName="Weblog_CommentForm_Comments" /> <em>(<CSControl:ResourceControl runat="server" ResourceName="Required" />)</em><asp:RequiredFieldValidator runat="server" ErrorMessage="*" ControlToValidate="tbComment" ValidationGroup="CreateCommentForm" /></dt>
                        <dd><asp:TextBox id="tbComment" runat="server" Rows="5" Columns="25" TextMode="MultiLine" ValidationGroup="CreateCommentForm" /></dd>
                        
                        <dt>Captcha</dt>
                        <dd><sbk:CaptchaControl id="captcha" runat="server" ErrorMessage="輸入錯誤."  LayoutStyle="CssBased" Display="dynamic" CaptchaLength="4" ValidationGroup="CreateCommentForm" /></dd>

                        <dt id="RememberWrapper" runat="server"><asp:CheckBox id="chkRemember" runat="server" Text="Remember Me?" ValidationGroup="CreateCommentForm" /></dt>

成果:

 

後註:

1. ASP.Net 皆可適用此元件,和 CMS 是不是 CommunityServer 並沒有關聯

2. 這種點文字 Captcha 已經有國外 de-Captcha 100% 讀取破解,可能還是會有機器人可以順利解讀,如果覺得功能不夠強大可以自行修改原始碼改善

3. 原本的 Subkismet 顯示後只會有一個文字方框讓使用者輸入訊息,一般訪客可能很難理解那方框用途,我加了 HelpInputMessage 版本供大家使用,需要者可下載

4. Hawaii blog Theme 修改範例,下載此範例

Comments (5) -

February 19. 2010 03:23

XexeX

你好,如果我是使用Hawaii,我該把Code放在哪個檔案內?

XexeX

February 19. 2010 03:54

dmwc

Hawaii Blog Themes 是在 \Themes\Blogs\hawaii\ 目錄

不論是哪個主題,都是改 post.aspx

dmwc

February 22. 2010 04:08

XexeX

不好意思,我對.Net沒有太多認識,請問"

,沒有

XexeX

February 22. 2010 08:28

dmwc

我已經把範例與我修改過的DLL檔案放到文章最末端,您可以下載回去試看看

dmwc

February 22. 2010 11:44

XexeX

Thanks

XexeX

Pingbacks and trackbacks (1)+