QapTcha 滑動驗證碼工具--工作原理分析

QapTcha 是一個網頁上另外一種形式的驗證碼工具,通過拉動滾動條來解鎖表單的提交動作。官網的地址已經失效,不知爲何,國內在這裏找到:OSCHINA


QapTcha 演示,點擊下載


以下直奔主題,先看工作原理:


wKioL1ZTWyexmuX3AAC1g-rv9lw772.png

從上述時序圖可見,當用戶進入頁面時,Qaptcha調用GeneratePass,分別生成兩個字符串,分別是 name(32)和value(7)的值,並向頁面注入一個Hidden類型的Input控件,隨後,用戶滑動Qaptcha觸發向服務端的Ajax請求,服務端接收請求後,將傳遞過來的qaptcha_key(即,GeneratePass生成的32位字符串)新建一個名爲 qaptcha_key的Session,用於後續提交動作的驗證;然後,服務端返回Session建立是否成功(result{error:true | false},最後,若result爲false,客戶端腳本將清空qaptchaInput控件(hidden input)的value。

當用戶執行提交操作,客戶端將POST一個qaptchaInput的value爲空的請求,服務端驗證以  Session["qaptcha_key"]是存在,且,值不爲空  && qaptchaInput的value爲空 的情況 爲 真,即 通過驗證,並執行後續操作;最終釋放 Session["qaptcha_key"]。


針對這一原理,與淘寶的註冊/登錄中使用的滑動驗證工具類同,但,算法截然不同。 就目前Qaptcha的實現方式而言,作爲驗證碼的代替工具不太可取,“形同虛設”。後續文章將對這一觀點作細節分析說明,以下先拋出幾個值得思考的問題:

1)建立Session["qaptcha_key"]的請求地址明確得取的情況下,通過模擬POST請求或使用webbrowser的document對象進行模擬網頁操作,是否就能在服務端建立這一Session?

2)通過模擬POST請求或使用webbrowser的document對象令qaptchaInput的值爲空,是否就無視了服務端的所謂的“真”判斷?

3)如果服務端不是簡單地建立一個Session,而考慮往客戶端返回一些其無法自行構造 ,且,與當前Session唯一對應的值,則,能否更有效杜絕客戶端模擬或演算驗證所需的項和值?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章