實現通用 Web CAPTCHA 圖形驗證碼 JavaScript 指令碼 API 服務 (JavaScript 指令碼動態網頁面引用)

來源:互聯網
上載者:User

一直想做一個通用的 JavaScript Web API 圖形驗證碼服務
這樣封裝,比做成 ASP.Net Server WebControl 更加通用,可以為任意消費頁面(htm、jsp、php、asp、aspx)提供“Web 圖形驗證碼”服務
以下是一些關鍵說明
1.CaptchaPlaceHolder.aspx 是 ContentType 為 text/x-javascript 的 JavaScript 頁面,供“消費頁面”直接 javascript src 引用
    消費頁面可以通過 QueryString 參數,定製請求“圖形驗證碼”,主要的參數說明如下:
    id=xxx                        圖形驗證碼的 ID,一個頁面可以引用多個“圖形驗證碼”,可由消費頁面程式分配
    l=4                            圖形驗證碼的字母個數 length
    w=140                        圖形驗證碼的寬度 width
    h=40                        圖形驗證碼的高度 height
    callback=_0hi1                JavaScipt 回呼函數名,“圖形驗證碼服務”產生驗證碼通過調用該回呼函數通知“消費者頁面”驗證碼的密文
    sign=sha1 or md5            簽名方式,“圖形驗證碼服務”通知“消費者頁面”驗證碼的密文的同時,還可根據該參數向“消費者頁面”提供 RSA SHA1 或 RSA MD5 的簽名,
                                “圖形驗證碼服務”簽名使用的 RSA 私密金鑰簽名,“消費者頁面”“預先獲得”“圖形驗證碼服務”供驗簽所使用的 RSA 公開金鑰
    rsa=                        “消費者頁面”要求“圖形驗證碼服務” RSA 加密所使用的“公開金鑰”,如果該參數為空白,“圖形驗證碼服務”將使用 TripleDES 加密方法,並使用
                                “消費者頁面”預知的公開共用的 Key 和 IV 進行加密並回調通知“消費者頁面”
    refresh=refresh                “消費者頁面”指定“重新整理驗證碼”的 JavaScript 函數的名稱,由“圖形驗證碼服務”實現,供“消費者頁面”使用
2.“圖形驗證碼服務”產生驗證碼後,回調“消費頁面”參數說明如下:
    ClientID                    消費頁面預先分配的ID
    EncryptMode                    加密方法:3DES 或 RSA
    EncryptData                    密文資料,採用 HexString 格式
    RSASignature                RSA 簽名資料,採用 HexString 格式
3.“圖形驗證碼”由“圖形驗證碼服務”產生後並打上產生“時間戳記”一起加密後,通過回呼函數通知“消費者頁面”,
    “消費者頁面”可以將密文驗證碼儲存到 Form 的隱藏欄位中,以及使用者識別並填寫的明文驗證碼,提交到自己的後台,利用預先擷取的共用 3DES 密鑰或自己提供RSA 給“圖形驗證碼”
服務的“公開金鑰”相應的“私密金鑰”進行解密,驗證時間戳記是否逾時,以及使用者填寫的明文驗證碼是否與解密的驗證碼一致,另外還可以利用“圖形驗證碼服務”“預先”提供的RSA 公開金鑰,
以及請求產生驗證碼時指定的驗簽方式 md5 或 sha1 進行驗簽,以助“消費者頁面”伺服器端程式驗證是由“圖形驗證碼服務”頒發的驗證碼,防篡改、防欺詐、防偷窺
4.程式清單:
    CaptchaPlaceHolder.aspx        圖形驗證碼 JavaScript API 服務頁面
    CaptchaPlaceHolder.aspx.cs
    CaptchaGenerator.aspx
    CaptchaGenerator.aspx.cs
    Captcha.aspx
    Captcha.aspx.cs
    Web.Config
    Sample.html                        消費頁面
以下使一些關於技術實現的細節說明以及好處
1.不採用 cookie 可以實現同一消費頁面可以載入多個“圖形驗證碼”互不干擾,而且可以跨網域名稱提供驗證碼服務
2.不採用 session 等“伺服器端工作階段狀態保持”技術,採用“用戶端工作階段狀態保持(QueryString)”技術並結合“加密技術”傳遞參數資料,因此支援負載平衡
3.由於要支援為任意頁面提供服務,因此“圖形驗證碼服務”產生的相關 javascript 指令碼不能與父頁面衝突,支援IE、FireFox、Chrome
    利用 guid 產生相關 elementID、functionName、變數
4.利用動態產生的 script element 實現跨域提交資料,局部重新整理頁面,在下次重新整理之前刪除上次產生的動態 script element,再產生新的動態 script element 提交資料與伺服器通訊
5.利用加密技術,將未經處理資料與時間戳記一同加密,防止到期的重放
6.由於需要將請求的“QueryString”資料用於產生指令碼,即輸出到頁面上,因此需要防止JavaScript指令碼注入形成的跨站指令碼攻擊XSS Attack,主要方法是將使用者請求進行
    JavaScript Encode 編碼(AntiXss.JavaScriptEncode)後輸出,另外也可以做輸入效驗,發現可疑的輸入,將其忽略後輸出
7.圖形驗證碼防機器自動識別,從網上找了一些現成代碼做了一番修改,CAPTCHA 圖形驗證碼還是比較難做的
    (1).畫噪點
    (2).畫噪線
    (3).根據圖片大小自動計算合適的 fontSize,並在合適的位置使用隨機漸進色 brush 畫出字串
    (4).扭曲映像

 效果

 

 

實現通用 Web 圖形驗證碼 JavaScript 指令碼 API 服務 (JavaScript 指令碼動態網頁面引用) 完整代碼
http://www.cnblogs.com/Microshaoft/archive/2008/12/14/1354741.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.