1. 程式人生 > >【探索】自動報警的驗證碼

【探索】自動報警的驗證碼

前言

最近 12306 換了套新驗證碼,又一次引發吐槽。

雖然圖片組合的方式仍有不少爭議,但無論如何能嘗試突破傳統,都是值得稱讚的。

畢竟傳統的驗證碼已飽受詬病了。為了對抗少數惡意使用者,卻降低了絕大部分正常人的使用者體驗。

每當無聊時,就會遐想各種驗證碼的方案,今天分享一個比較有趣的。

自動報警的密碼

曾有傳言,在 ATM 機上密碼倒著輸會自動報警。且不論真實性,就這想法還是有點意思的。

  • 首先,也是最重要的,輸入了這個反密碼仍能取錢,這滿足了劫匪的目的。但同時已悄悄的報警,想必也逃不遠了。

  • 其次,這無需引入一個額外的報警密碼。多一個就會提升複雜度,增加記錯的可能。

  • 最後,即使平時輸錯,那麼正好輸成這個報警碼的概率也是很低的。(12321 這種迴文暫不考慮)

於是密碼除了可以用於驗證外,還可以在真與假之間建立一個規則,用於隱寫額外的資訊。

這個特徵,是否也可用於驗證碼呢。

自動報警的驗證碼

我們得設計一個圈套,讓正常使用者幾乎不會落入,而假人一不小心就會掉進這個陷阱裡。

通常情況下,破解驗證碼的程式都是直接抓取圖片中的畫素點,然後進行分析。而使用者看到的,則是螢幕上最終顯示出來的內容。

在絕大多數情況下,這兩者都是相同的。但我們也可以讓它變得不同,人為的製造一點麻煩出來。

例如,一個內容為 d6xm 的驗證碼:

這是個再普通不過的驗證碼,破解幾乎毫無壓力。不過,這次玩的不再是演算法上的對抗了。

我們在頁面中某個隱蔽的地方,偷偷插入一個 CSS 規則:

.captcha { transform: rotate(180deg) }

將圖片進行 180° 的旋轉。這時,呈現在使用者眼前的就是這樣一個東西了:

內容正好變成了 wx9p!

到底哪個是正確答案呢,就不用說了吧。既然我們考察的是使用者,那當然就是眼見為實的了!

但通過抓圖識別的假人看來,仍是原始的畫素點,並不知道頁面中還有這麼個小把戲,於是一不小心就中招了。

即使使用者偶爾會有輸錯,但如果能把 wx9p 拼成 d6xm,那也太巧合了,想必還是開掛的可能性比較大吧。

類似輸入報警密碼仍能取錢,我們也儘量保持這個陷阱足夠低調。即使使用者提交了 d6xm 也算通過,但後臺會悄悄的記錄下這一切。

當某個使用者達到一定可疑程度時,就可以對其採取相應的措施了。將攔截處理進行延時,以避免過早的進入對抗。

題庫模板

當然,上面只是舉了個簡單的例子。像旋轉這樣的規則,有著太多的侷限。並非所有字元旋轉後都有對應的,也不能出現迴文字串。

事實上,還可以嘗試更為通用的方法。

前面提到 ATM 取款密碼時,若能單獨設定一個報警密碼,其實也是很好的,只是要多記一條。但在驗證碼這裡,使用者是完全透明的,再複雜也是瀏覽器自動搞定的。

我們嘗試在圖片裡寫入兩套字串。一個非常明顯,另個則像水印一樣暗淡。

正常情況下,後者不仔細觀察很難發現。但通過頁面中的濾鏡,會使兩者正好相反:

於是在終端使用者眼裡,看見的反而是水印的版本。

除了這些,其實有無數多的變化方案。例如事先對圖片進行扭曲,渲染時再還原回來,等等。

當然不論怎樣,其本質都是一樣的。相比傳統的單一影象輸出,如今還多一個變幻引數,並且位於圖片之外的頁面裡。兩者必須相結合,才能渲染出最終的影象。

對於普通的傻瓜式破解程式,這道門檻即可將其原形畢露。為了獲得圖片最終被應用上的樣式,外掛不得不使用瀏覽器核心對頁面進行渲染,取代傳統直接抓介面的方式。

於是進入前端指令碼對抗階段。

對抗

對抗是沒有標準答案的。如果要有,那就是成本最低的,才能堅持的更久。

傳統的驗證碼出現十多年,已經積累了大量的破解經驗,現成的工具和演算法隨處可得,影象識別進入低成本規模化。在這樣形勢下,還停留在純粹的影象上,也難以大幅改進了。

但新增了一個渲染時的變數,情況就變得好轉。我們可以使用前端加密混淆技術、以及各種黑魔法,進行對抗。

也許某個外掛在識圖領域非常強,但對於頁面指令碼的瞭解並不深入。於是,我們就可使用另一個自己熟悉的領域,和傳統進行對抗了。

當然,最完美的驗證碼,就是沒有驗證碼,讓頁面指令碼來進行自我檢驗。可以參考:《對抗假人 —— 前後端結合的 WAF》。在過去前端技術尚不發達的年代,這套系統無需驗證碼也能抵擋絕大多數的惡意提交和 cc 攻擊。 在如今,比的就是更巧妙的方案了。

無論怎樣,總是可以有更低成本的綜合方案,來解決實際問題,而非吊死在一棵樹上。

懲罰

外掛是永遠不會消失的,而且只會越來越先進。我們不能阻止武器的製造者,但能懲罰濫用的人。

任何一個方案都會被破解,是無法長期對抗的。但可以在它的有效期內,儘可能多的揪出開掛使用者,並作出懲罰。尤其是實名制的賬號,逮到一個就少一個。

這種方案也未免每次都開啟,而是時不時的進行抽查,讓使用者在使用外掛的具有一定的畏懼性,才是最終目標,

相關推薦

探索自動報警驗證

前言 最近 12306 換了套新驗證碼,又一次引發吐槽。 雖然圖片組合的方式仍有不少爭議,但無論如何能嘗試突破傳統,都是值得稱讚的。 畢竟傳統的驗證碼已飽受詬病了。為了對抗少數惡意使用者,卻降低了絕大部分正常人的使用者體驗。 每當無聊時,就會遐想各種驗證碼的方案,今天分享一個比較有趣的。 自動報警的密碼 曾有

5GDI+ 生成驗證

splay 小應用 eric gen 前景 num 微軟 param graphic 這裏我們做一個小應用,就是繪制一個如下圖所示的驗證碼圖片。並且點擊驗證碼的時候會自動切換。 實現思路如下: 通過Random生成隨機數或字符及驗證碼 通過驗證碼內容長度生成指定大小的圖

精華PHP網站驗證不顯示的終結解決方案

brief 重新 pad enter 批量 list 展開 href lis PHP網站驗證碼不顯示,這個是個很基礎的PHP問題了,不過有點時候會比較讓開發者比較頭疼了。很多解決方案僅僅考慮到gd2,卻忽略了另外一個很重要的因素了,相信在了解本教程之後,驗證碼不顯示

Python短信驗證平臺查詢賬戶余額demo---創藍253雲通訊平臺案例

epo json desc des 驗證碼 余額 其中 pconnect .com #!/usr/local/bin/python#-- coding:utf-8 -- Author: jacky Time: 14-2-22 下午11:48 Desc: 短信http接口的p

python帶圖片驗證的登入自動化實戰

近期在跟進新專案的時候,整體的業務線非常之長,會一直重複登入退出不同賬號的這個流程,所以想從登入開始實現部分的自動化。因為是B/S的架構,所以採用的是selenium的框架來實現。大致實現步驟如下:   1.環境準備   2.驗證碼爬取   3.識別方案選擇   4.影象處理和識別   5.自動化實現 一、

2018.05.11python3.6+selenium 知乎自動登入+驗證 問題

時隔這麼多年,驗證碼問題我解決了,這裡也能寫下,我就是懶得寫。哈哈   #coding = utf-8 ''' 自動登入知乎 出現了驗證碼的問題,待解決...... ''' import time from selenium import webdriver driver = w

分享短信驗證功能對接CmsEasy

源碼分享 無線 設置 功能 之前 文件覆蓋 完成 系統管 版本 對接短信的時候發現一家短信公司,有些不錯的短信驗證碼的插件,對接起來挺方便的,有需求的可以看一下。http://www.ihuyi.com/插件說明本插件系互億無線針對CmsEasy_5.6_UTF-8_201

分享短信驗證如何對接 WordPressv4.0,短信插件

word www. ont wordpress 1.0 key 驗證 註冊 插件 對接短信的時候發現一家短信公司,有些不錯的短信驗證碼的插件,對接起來挺方便的,有需求的可以看一下。http://www.ihuyi.com/插件說明本插件系互億無線針對Wordpress開發,

分享短信驗證如何實現微米CMS

用戶 帳戶 登錄 article 不錯 原創 tail 發現 reg 對接短信的時候發現一家短信公司,有些不錯的短信驗證碼的插件,對接起來挺方便的,有需求的可以看一下。http://www.ihuyi.com/插件說明本插件系互億無線針對微米CMS_V29.2版本開發,請按

專案實戰 使用者模組 驗證程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

插件分享短信驗證對接得推校園O2O,短信功能

步驟 提交 所有 用戶註冊 一個 插件開發 來源 鏈接 獲取驗證碼 在互億無線短信平臺找到一個插件,在這邊分享一下,有需要可以了解,比自己開發要容易很多哦。http://www.ihuyi.com/ 插件說明本插件系互億無線針對得推校園O2O短信插件開發,插件內的所有文件均

插件分享短信驗證怎麽對接PHPSHE商城系統

短信驗證碼 短信平臺 進入 follow 手機 修改 管理後臺 手機號 安裝步驟 在互億無線短信平臺找到一個插件,在這邊分享一下,有需要可以了解,比自己開發要容易很多哦。http://www.ihuyi.com/ 插件說明 本插件系互億無線針對phpsheV1.6短信插件開

分享短信驗證如何對接Discuz論壇

平臺 驗證碼 http 賬號同步 用戶 進入 com follow 密碼 對接短信的時候發現一家短信公司,有些不錯的短信驗證碼的插件,對接起來挺方便的,有需求的可以看一下。http://www.ihuyi.com/ 插件說明本插件系互億無線針對DsMall_v2017120

專案實戰 使用者模組 驗證程式

伴著元旦的腳步,小編的專案跟隨著冬的腳步,馬不停蹄,小夥伴們都有這樣的經驗,在註冊某個頁面的時候,或者輸入了好幾次密碼,但是都沒有輸對的時候,這個時候,需要輸入驗證碼,那時年少,覺得,註冊個網頁為什麼還要輸入驗證碼呢,不是多此一舉嘛,然後隨著學習和專案實戰的深入,逐漸認識到,驗證碼有著不可估量的作用。首先,小

js例項js傳送驗證後倒計時60秒

首先寫一個按鈕: <input type="button" id="btn" value="免費獲取驗證碼" onclick="settime(this)" /> 然後寫js程式碼: //定義一個60秒計時器變數 var countdo

B/SASP.NET---驗證-生成和切換

驗證碼是什麼? 驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分使用者是計算機還是人的公共全自動程式

SparkDAGScheduler源代淺析

under 提交 title 作者 sem lis git lean access DAGScheduler DAGScheduler的主要任務是基於Stage構建DAG,決定每個任務的最佳位置 記錄哪個RDD或者Stage輸出被物化

java之java代的執行機制

() alt 分享 str clas not roc 成員 輸入 要在JVM中執行java代碼必須要編譯為class文件,JDK是如何將Java代碼編譯為class文件,這種機制通常被稱為Java源碼編譯機制。 1、JVM定義了class文件的格式,但是並沒有定義如何將ja

js接口實現代

此外 額外 const 沒有 輔助方法 通過 ces 程序 string 一、什麽是接口 接口是面向對象JavaScript程序員的工具箱中最有用的工具之一。在設計模式中提出的可重用的面向對象設計的原則之一就是“針對接口編程而不是實現編程”,即我們所說的面向接

托管代和非托管代的區別

產生 沒有 匯編代碼 cati 一行 包含 虛擬機 被調用 庫類 什麽是托管代碼(managed code)? 托管代碼是一microsoft的中間語言(IL),他主要的作用是在.NET FRAMEWORK的公共語言運行庫(CLR)執行代碼前去編譯