Subkismet captcha for CommunityServer or ASP.Net
現在一位網站管理員,除了要管理真人的內容外,對付廣告機器人也是一件頭痛的問題,各大網站相繼淪陷於廣告機器人之後,就有網站陸續加入認證圖案,這時就造就了 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 修改範例,下載此範例