滑動驗證碼相比于傳統(tǒng)的圖片驗證碼有了更強的安全性,對我們的網(wǎng)站保駕護航提供了跟好的防御措施,主要是加入了人機交互的設(shè)計模式,別看這一個小小的滑動,可不是一般平臺能夠搞出來的喲,很多都要借助第三方,目前大家看到的網(wǎng)站很多都加入了這個滑動驗證碼,想給自己的網(wǎng)站搞一個么,今天就來介紹一下這個玩法。

目錄
- 滑塊驗證碼樣例
- 關(guān)于滑塊驗證碼
- 開發(fā)準(zhǔn)備
- 系統(tǒng)編碼
- 附錄
滑塊驗證碼樣例

關(guān)于滑塊驗證碼
滑塊驗證碼主要的作用是方便用戶進行快捷驗證操作,但是同時要合理的辨別到底是機器操作還是人工操作,這一點顯得難度比較大,是屬于人機識別的智能開發(fā)范疇,所以相對于之前的傳統(tǒng)4位或者6位圖片驗證碼來說,開發(fā)起來顯得更加困難,所以一般來說都會接入一些第三方的Api來輔助開發(fā)人員進行滑塊識別和驗證。主要是根據(jù)用戶在頁面內(nèi)的一些鼠標(biāo)點擊,停留,滑動距離等信息,綜合來斷定這個滑動操作是否是人為發(fā)起的。本文將結(jié)合阿里云的滑塊驗證技術(shù)來實現(xiàn)網(wǎng)站安全登錄操作。
開發(fā)準(zhǔn)備
進入阿里云的云盾·數(shù)據(jù)風(fēng)控·人機識別,配置管理里面添加對應(yīng)的服務(wù)

可以在系統(tǒng)集成板塊找到你想要的代碼

根據(jù)語言需求下載對應(yīng)的sdk

系統(tǒng)編碼
將上面圖片中的代碼放到一個定義的html里面
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <!-- 國內(nèi)使用 --> <script type="text/JAVAscript" charset="utf-8" src="//g.alicdn.com/sd/ncpc/nc.js?t=2015052012"></script> <!-- 若您的主要用戶來源于海外,請?zhí)鎿Q使用下面的js資源 --> <!-- <script type="text/JavaScript" charset="utf-8" src="//aeis.alicdn.com/sd/ncpc/nc.js?t=2015052012"></script> --> </head> <body> <div id="your-dom-id" class="nc-container"></div> <!--No-Captcha渲染的位置,其中 class 中必須包含 nc-container--> <!--構(gòu)建數(shù)據(jù)傳遞到后臺--> <div class="container"> <form action="html.php" method="post"> <input type='hidden' id='nc_token' name='nc_token'/> <input type='hidden' id='csessionid' name='csessionid'/> <input type='hidden' id='scene' name='scene'/> <input type='hidden' id='sig' name='sig'/> <div class="ln"> <input type="submit" value="提交"> </div> </form> </div> <script type="text/javascript"> var nc_token = ["CF_App_1", (new Date()).getTime(), Math.random()].join(':'); var NC_Opt = { renderTo: "#your-dom-id", appkey: "CF_APP_1", scene: "register", token: nc_token, customWidth: 300, trans:{"key1":"code0"}, elementID: ["usernameID"], is_Opt: 0, language: "cn", isEnabled: true, timeout: 3000, times:5, apimap: { // 'analyze': '//a.com/nocaptcha/analyze.jsonp', // 'get_captcha': '//b.com/get_captcha/ver3', // 'get_captcha': '//pin3.aliyun.com/get_captcha/ver3' // 'get_img': '//c.com/get_img', // 'checkcode': '//d.com/captcha/checkcode.jsonp', // 'umid_Url': '//e.com/security/umscript/3.2.1/um.js', // 'uab_Url': '//aeu.alicdn.com/js/uac/909.js', // 'umid_serUrl': 'https://g.com/service/um.json' }, callback: function (data) { window.console && console.log(nc_token) window.console && console.log(data.csessionid) window.console && console.log(data.sig) //組裝數(shù)據(jù)到后臺 document.getElementById('nc_token').value = nc_token; document.getElementById('csessionid').value = data.csessionid; document.getElementById('sig').value = data.sig; } } var nc = new noCaptcha(NC_Opt) nc.upLang('cn', { _startTEXT: "請按住滑塊,拖動到最右邊", _yesTEXT: "驗證通過", _error300: "哎呀,出錯了,點擊<a href="javascript:__nc.reset()">刷新</a>再來一次", _errorNetwork: "網(wǎng)絡(luò)不給力,請<a href="javascript:__nc.reset()">點擊刷新</a>", }) </script> </body> </html>
以PHP語言為例獲取參數(shù)并驗證。
<?php include_once './aliyun-php-sdk-core/Config.php'; use afsRequestV20180112 as Afs; //YOUR ACCESS_KEY、YOUR ACCESS_SECRET請?zhí)鎿Q成您的阿里云accesskey id和secret ,這里從阿里云控制臺的個人中心下面去獲取 $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "YOUR ACCESSKEY", "YOUR ACCESS_SECRET"); $client = new DefaultAcsClient($iClientProfile); DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "afs", "afs.aliyuncs.com"); $request = new AfsAuthenticateSigRequest(); $request->setSessionId("xxx");// 必填參數(shù),從前端獲取,不可更改,Android和IOS只傳這個參數(shù)即可 $request->setToken("xxx");// 必填參數(shù),從前端獲取,不可更改 $request->setSig("xxx");// 必填參數(shù),從前端獲取,不可更改 $request->setScene("xxx");// 必填參數(shù),從前端獲取,不可更改 $request->setAppKey("xxx");//必填參數(shù),后端填寫,和前端的AppKey保持一致 $request->setRemoteIp("xxx");//必填參數(shù),后端填寫 $response = $client->getAcsResponse($request);//返回code 100表示驗簽通過,900表示驗簽失敗 print_r($response);
瀏覽器輸出結(jié)果,下面結(jié)果表示驗證成功,現(xiàn)在一般來說就可以創(chuàng)建一個session標(biāo)識驗證成功,前臺點擊登錄就可以放行了,這些操作就是結(jié)合我們具體的業(yè)務(wù)場景靈活實現(xiàn)了。
