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

前言

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

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

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

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

自動報警的密碼

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

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

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

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

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

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

自動報警的驗證碼

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

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

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

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

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

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

.captcha { transform: rotate(180deg) }

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

內容正好變成了 wx9p!

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

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

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

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

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

題庫模板

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

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

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

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

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

於是在最終用戶眼裏,看見的反而是水印的版本。

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

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

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

於是進入前端腳本對抗階段。

對抗

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

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

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

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

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

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

懲罰

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

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

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

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