您好,登錄后才能下訂單哦!
本篇內容主要講解“如何去除圖片驗證碼”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何去除圖片驗證碼”吧!
全自動區分計算機和人類的圖靈測試(Completely Automated Public Turing test to tell Computers and HumansApart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機或人的全自動化程序。
標準驗證碼
標準驗證碼即是我們常見的圖形驗證碼、語音驗證碼,基于機器難以處理復雜的計算機視覺及語音識別問題,而人類卻可以輕松的識別來區分人類及機器。
創新驗證碼
創新驗證碼是基于第一代驗證碼的核心思想(通過人類知識可以解答,而計算機難以解答的問題進行人機判斷)而產生的創新的交互優化型驗證碼。第二代驗證碼基于第一代驗證碼的核心原理:“人機之間知識的差異”,拓展出大量創新型驗證碼。
無知識型驗證碼
無知識型驗證碼最大的特點是不再基于知識進行人機判斷,而是基于人類固有的生物特征以及操作的環境信息綜合決策,來判斷是人類還是機器。如Google的ReCaptcha。
(1)避免觸發驗證碼驗證碼的引入會帶來用戶友好度的下降,增加驗證碼輸入以及人眼對驗證碼識別的可能錯誤等都會帶來不好的使用體驗。這對追求用戶體驗的網站來說,在沒遇到可疑行為時,其采取的策略是默認不開啟驗證碼功能,當觸發可疑行為識別規則時,才會出現驗證碼。基于此原理,對攻擊方來說,就是盡量避免觸發可能出現驗證碼的規則。一般可疑行為識別是通過檢查頻繁嘗試并且出錯這個行為來進行,基于此的對抗措施則是使用不同的IP來進行嘗試,或者等待足夠的時間再次嘗試,這樣讓目標網站程序認為這些嘗試都是正常的訪問請求,從而在自動化程序端連續作業時不會出現驗證碼而達到繞過的目的。
(2)驗證碼固定從前面的驗證碼固定問題描述可看出,攻擊者可以在同一個會話下,在獲得第一個驗證碼后,后面不再主動觸發驗證碼生成頁面,并且一直使用第一個驗證碼就可循環進行后面的表單操作,從而繞過了驗證碼的屏障作用。
(3)驗證碼機器自動識別計算機自動識別驗證碼,主要原理是通過一定的算法預先建立驗證碼范圍內的字體特征庫,再將要識別的驗證碼通過同樣的算法生成特征,與之前保存的特征庫進行比較,進而得到圖片驗證碼的值。一般地,其識別過程有如下圖所示的處理流程:
(4)深度學習——GANs網絡網站登錄圖像驗證碼的發展到現在,遇到的最大的威脅可能就是深度學習了,特別是GANs網絡的出現,讓圖像驗證碼遇到了最強勁的對手。
道高一尺魔高一丈
圖片驗證碼在不斷發展,目的就是為了避免一些非正常用戶操作。而不論圖形驗證碼如何發展,終究是敵不過攻擊者的破解手段,正所謂 “道高一尺魔高一丈” 。就比如鐵路12306的圖片點選驗證碼,不僅沒有擋住黃牛,反而讓黃牛搶票更加輕松。
為什么受傷的總是我
在開發者與攻擊者的角逐中,受影響最大的莫過于我們用戶了。各種千奇百怪的復雜驗證碼,不是為了考驗黑客,而是考驗用戶。
驗證碼的圖片常常扭曲得連人眼都認不出來。這在那些無實義的字詞中體現得格外明顯,就像“rl10Ozirl”。里面用的到底是小寫的字母“L”還是數字“1”?是數字“0”還是字母“O”?真正的用戶在使用途中真的是飽經磨難。。。“為什么受傷的總是我”。
浪費大家的寶貴時間
據卡內基梅隆大學的研發小組估算,全球人口每天在這些煩人的屏障入口處所耗費的時間,累計可達15 w小時。有種新型的驗證碼——“多重驗證碼”(reCaptcha),至少是把這些時間用在了公共價值的創造上。你看到的圖片是一個從掃描不良的谷歌(微博)圖書中截取出來的模糊單詞;而你輸入該詞拼寫的過程,其實就是在協助谷歌處理、識別一段有效文本。
即便如此,我們這些守規矩的用戶,每天還是會浪費掉17年的時間。這簡直是對生命的可恥浪費。而用戶真正想要的是去掉這些額外的操作。
風控防火墻
風控防火墻是近幾年研發出來的一種專門應用于原圖片驗證場景的替代品。它將完全取締原來的圖片驗證碼,將用戶體驗做到最好。在用戶完全無感的情況下來區分正常用戶與非正常用戶。通過AI立體防御機制,實時防控。用戶再也不用擔心出現(“驗證碼輸入錯誤!
”)的煩人提示了。
進入 防火墻控制臺,在左側導航欄選擇【網站管理】,進入網站管理頁面,單擊【發到郵箱】接收密鑰。
前往新昕科技官網,在頂部導航欄選擇【解決方案】>【下載中心】,進入下載中心頁面,找到短信防火墻服務器安裝包,點擊【下載鏈接】即可下載。
Java 在頁面合適的位置(標簽內)加入以下代碼引入JS文件:
<script type="text/javascript" src="/NxtJsServlet"></script>
PHP 在頁面合適的位置(標簽內)加入以下代碼引入JS文件:
<script id="finger" type="text/javascript" src="/nxt_inc/nxt_front.php"></script>
Java
修改配置(和業務系統同系統不需要修改):
newxtc.ini (存放位置:"/WEB-INF/classes/newxtc.ini") 修改參數(fireWareUrl)--> fireWareUrl=http://localhost:7502
短信下發
public RetMsg smsSend(HttpServletRequest request, HttpServletResponse response, String clientMobile) { RetMsg retMsg = new RetMsg(-1, "系統異常"); FwClient fwClient = new FwClientImpl(); try { // 1 調用【短信防火墻】短信發送請求 HashMap < String, Object > paramMap = fwClient.getSendReq(request, clientMobile); String jsonReq = fwClient.execReq(paramMap); String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult"); if("REJECT".equals(smsSendRet)) { retMsg.setRet(3); retMsg.setMsg("請求過于頻繁"); } else { // 業務 TODO // 業務調用短信接口 TODO // 調用短信接口 結束 if(smsRetMsg != null && smsRetMsg.getRet() == 0) { // 2 調用【短信防火墻】成功結果 fwClient.execSucc(paramMap); logger.debug("send succ"); retMsg.setRet(0); retMsg.setMsg("發送驗證碼成功"); } else { // 2 調用【短信防火墻】失敗結果 SmsVerifyCache.getInstance().remove(clientMobile); fwClient.execFail(paramMap); retMsg.setRet(-1); retMsg.setMsg("發送驗證碼失敗"); } } } catch(Exception e) { for(StackTraceElement elment: e.getStackTrace()) { logger.error(elment.toString()); } } return retMsg; }
public RetMsg smsVerify(HttpServletRequest request, HttpServletResponse response, String clientMobile, String smsVerifyCode) { FwClient fwClient = new FwClientImpl(); RetMsg retMsg = new RetMsg(-1, "系統異常"); if(smsVerifyCode == null || smsVerifyCode.isEmpty()) { retMsg.setRet(1); retMsg.setMsg("輸入驗證碼為空"); } else { // 1 調用【短信防火墻】驗證請求 HashMap < String, Object > paramMap = fwClient.getVerifyReq(request, clientMobile); // 請求防火墻 String jsonReq = fwClient.execReq(paramMap); // 報文處理 String smsSendRet = fwClient.getRetVaule(jsonReq, "riskResult"); if("REJECT".equals(smsSendRet)) { retMsg.setRet(3); retMsg.setMsg("請求過于頻繁"); } // 業務 TODO if(cacheSmsVerify != null && cacheSmsVerify.getVerifyCode() != null && !cacheSmsVerify.getVerifyCode().isEmpty()) { if(cacheSmsVerify.getVerifyCode().equals(smsVerifyCode)) { retMsg.setRet(0); retMsg.setMsg("驗證成功"); } else { retMsg.setRet(1); retMsg.setMsg("驗證碼錯誤"); } } else { retMsg.setRet(-9); retMsg.setMsg("驗證碼超時"); } if(retMsg.getRet() == 0) { // 2 調用【短信防火墻】成功結果 fwClient.execSucc(paramMap); } else { // 2 調用【短信防火墻】失敗結果 fwClient.execFail(paramMap); } } return retMsg; }
PHP
修改配置文件(和業務系統同系統不需要修改):
nxt_ini.php (存放位置:"\nxt_inc") 修改參數($GLOBALS ["fireWareUrl"])-->$GLOBALS["fireWareUrl"]="http://localhost:7502"
短信下發
require_once $_SERVER['DOCUMENT_ROOT']. "/nxt_inc/nxt_client.php"; /** * 發送短信 * @param $mobile */ public function send(string $mobile) { $fwClient = new ClientApi(); // 獲取下發短信報文 $paramMap = $fwClient - > getSendReq($phone); // 執行下發短信請求 $jsonReq = $fwClient - > execReq($paramMap); $fwRet = $fwClient - > getRetVaule($jsonReq, "riskResult"); if("REJECT" != $fwRet) { // 發送短信業務 TODO if(發送成功標記) { // 下發短信成功 $fwClient - > execSucc($paramMap); } else { // 下發短信失敗 $fwClient - > execFail($paramMap); } } }
短信驗證
/** * 短信驗證 * @param $mobile */ public function smsVerify(string $mobile) { $fwClient = new ClientApi(); // 獲取短信驗證報文 $paramMap = $fwClient - > getVerifyReq($phone); // 執行短信驗證請求 $jsonReq = $fwClient - > execReq($paramMap); $fwRet = $fwClient - > getRetVaule($jsonReq, "riskResult"); if("REJECT" != $fwRet) { // 驗證短信業務 TODO if(驗證成功標記) { // 驗證短信成功 $fwClient - > execSucc($paramMap); } else { // 驗證短信失敗 $fwClient - > execFail($paramMap); } } }
防御攔截數據盡收眼底,實時查看當日數據詳情與近期風險趨勢。 通過風控數據看板,可查看1-30天的驗證情況、風控攔截情況以及驗證事件觸發的AI模型情況。
進入防火墻控制臺,在左側導航欄選擇【風險大盤】,進入風險大盤頁面。
到此,相信大家對“如何去除圖片驗證碼”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。