滑動(dòng)驗(yàn)證碼相比于傳統(tǒng)的圖片驗(yàn)證碼有了更強(qiáng)的安全性,對(duì)我們的網(wǎng)站保駕護(hù)航提供了跟好的防御措施,主要是加入了人機(jī)交互的設(shè)計(jì)模式,別看這一個(gè)小小的滑動(dòng),可不是一般平臺(tái)能夠搞出來的喲,很多都要借助第三方,目前大家看到的網(wǎng)站很多都加入了這個(gè)滑動(dòng)驗(yàn)證碼,想給自己的網(wǎng)站搞一個(gè)么,今天就來介紹一下這個(gè)玩法。
目錄
- 滑塊驗(yàn)證碼樣例
- 關(guān)于滑塊驗(yàn)證碼
- 開發(fā)準(zhǔn)備
- 系統(tǒng)編碼
- 附錄
滑塊驗(yàn)證碼樣例
關(guān)于滑塊驗(yàn)證碼
滑塊驗(yàn)證碼主要的作用是方便用戶進(jìn)行快捷驗(yàn)證操作,但是同時(shí)要合理的辨別到底是機(jī)器操作還是人工操作,這一點(diǎn)顯得難度比較大,是屬于人機(jī)識(shí)別的智能開發(fā)范疇,所以相對(duì)于之前的傳統(tǒng)4位或者6位圖片驗(yàn)證碼來說,開發(fā)起來顯得更加困難,所以一般來說都會(huì)接入一些第三方的Api來輔助開發(fā)人員進(jìn)行滑塊識(shí)別和驗(yàn)證。主要是根據(jù)用戶在頁面內(nèi)的一些鼠標(biāo)點(diǎn)擊,停留,滑動(dòng)距離等信息,綜合來斷定這個(gè)滑動(dòng)操作是否是人為發(fā)起的。本文將結(jié)合阿里云的滑塊驗(yàn)證技術(shù)來實(shí)現(xiàn)網(wǎng)站安全登錄操作。
開發(fā)準(zhǔn)備
進(jìn)入阿里云的云盾·數(shù)據(jù)風(fēng)控·人機(jī)識(shí)別,配置管理里面添加對(duì)應(yīng)的服務(wù)
可以在系統(tǒng)集成板塊找到你想要的代碼
根據(jù)語言需求下載對(duì)應(yīng)的sdk
系統(tǒng)編碼
將上面圖片中的代碼放到一個(gè)定義的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> <!-- 若您的主要用戶來源于海外,請(qǐng)?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ù)傳遞到后臺(tái)--> <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ù)到后臺(tái) 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: "請(qǐng)按住滑塊,拖動(dòng)到最右邊", _yesTEXT: "驗(yàn)證通過", _error300: "哎呀,出錯(cuò)了,點(diǎn)擊<a href="javascript:__nc.reset()">刷新</a>再來一次", _errorNetwork: "網(wǎng)絡(luò)不給力,請(qǐng)<a href="javascript:__nc.reset()">點(diǎn)擊刷新</a>", }) </script> </body> </html>
以PHP語言為例獲取參數(shù)并驗(yàn)證。
<?php include_once './aliyun-php-sdk-core/Config.php'; use afsRequestV20180112 as Afs; //YOUR ACCESS_KEY、YOUR ACCESS_SECRET請(qǐng)?zhí)鎿Q成您的阿里云accesskey id和secret ,這里從阿里云控制臺(tái)的個(gè)人中心下面去獲取 $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只傳這個(gè)參數(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表示驗(yàn)簽通過,900表示驗(yàn)簽失敗 print_r($response);
瀏覽器輸出結(jié)果,下面結(jié)果表示驗(yàn)證成功,現(xiàn)在一般來說就可以創(chuàng)建一個(gè)session標(biāo)識(shí)驗(yàn)證成功,前臺(tái)點(diǎn)擊登錄就可以放行了,這些操作就是結(jié)合我們具體的業(yè)務(wù)場(chǎng)景靈活實(shí)現(xiàn)了。