• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種手繪軌跡驗證碼的仿真實現

      2022-05-25 04:48:06徐寶林
      現代計算機 2022年6期
      關鍵詞:手繪字符起點

      徐寶林

      (廣東白云學院大數據與計算機學院,廣州 510450)

      0 引言

      隨著互聯(lián)網的飛速發(fā)展,基于Web服務的各種分布式信息處理得到了廣泛應用。但同時,隨著Web服務使用量的不斷增加,機器人惡意攻擊系統(tǒng)的機會也越來越多。

      基于Web的應用系統(tǒng)本質上都是分布式系統(tǒng),分布式系統(tǒng)從軟件架構上看分為客戶端和服務器端。在基于多層架構的應用系統(tǒng)中,為了防止惡意機器程序通過客戶端對服務器端進行攻擊,通常會采用一種名為“驗證碼”的網絡安全機制,而驗證碼的設計必須基于全自動開放式人機區(qū)分圖靈測試。

      全自動開放式人機區(qū)分圖靈測試(completely automated public turing test to tell computers and humans apart,CAPTCHA),又稱為人機交互驗證(human interactive proof,HIP),它能自動產生并評估一個測試,這個測試能被幾乎所有人類用戶通過,而現有的計算機程序不能通過。

      通常在客戶端設置的第一道安全屏障就是驗證碼。在諸多驗證碼形式當中,基于圖形繪制的文本驗證碼是最簡單也是最常用的一種。但實驗證明,基于圖形繪制的傳統(tǒng)文本驗證碼極易被機器程序識別,這無疑給客戶端惡意程序攻擊服務器端提供了機會。

      為了解決以上安全問題,本文提出了一種“手繪軌跡引導的圖形文本驗證碼”解決方案,該方案將傳統(tǒng)固有空間順序的字符放置在隨機手繪曲線軌跡的特定位置上,從而通過提高空間復雜度來達到難以被機器程序識別的目的。

      1 手繪軌跡驗證碼的提出

      1.1 關于傳統(tǒng)圖形文本驗證碼

      業(yè)界已經提出了多種驗證碼實施方案,例如圖像標記、文本識別、對象識別、音頻識別、解謎以及視頻識別。由于基于圖形繪制的文本驗證碼實現成本較低,所以文本驗證碼仍然應用非常廣泛。基于圖形繪制的文本驗證碼通常由放在前面的字母、數字字符圖像及失真背景圖像組成,從而使光學字符識別(OCR)程序無法識別這些圖像。對基于圖形繪制的文本驗證碼來說,驗證碼字符通常隱藏在圖形中。將扭曲字符與混淆背景組合在一起是應用較廣泛的一種文本驗證碼解決方案。

      圖1所示的樣例就是具有代表性的傳統(tǒng)基于圖形繪制的文本驗證碼圖。

      圖1 基于圖形繪制的文本驗證碼

      1.2 典型圖形文本驗證碼的安全性測試

      對于形如圖1所示的圖形驗證碼,由于字符空間順序默認是從左至右排列的,其空間復雜度相對較低,很容易被機器人程序識別。研究人員使用“超級鷹”(一款在線驗證碼識別程序:http://www.chaojiying.com/demo.html)對若干傳統(tǒng)圖形文本驗證碼進行了識別測試,其識別率見表1。

      表1 傳統(tǒng)圖形文本驗證碼識別測試

      從表1中的不完全測試數據可知,傳統(tǒng)圖形文本驗證碼極易被機器程序識別,識別率高達90%以上。由此可見,傳統(tǒng)圖形文本驗證碼的安全性相對較低,不建議使用。

      1.3 手繪軌跡驗證碼的提出

      不妨假設:若增加圖形驗證碼的空間復雜度,機器程序識別難度將加大。

      先考慮一種極端情況,即無法判斷字符順序的情況,如圖2所示。

      圖2 無序圖

      由于圖2是無序圖,機器程序不知道哪個字符是起點、哪個字符是終點,因此,無論是人還是機器程序都無法識別驗證碼序列。很顯然,無序圖不能作為驗證碼應用。

      但如果在圖2的基礎上加上手繪軌跡,則情況會發(fā)生很大改變。圖3不妨命名為“手繪軌跡引導驗證碼圖”。

      圖3 手繪軌跡引導驗證碼

      對于圖3而言,若沿著曲線軌跡從一個端點遍歷到另一個端點,則人的視覺較容易識別出驗證碼是“5XTmn”或“nmTX5”;但對機器程序來說,由于空間復雜度的加大而變得難以識別。實驗證明,在表1的基礎上將取自網易郵箱、新浪郵箱、21CN郵箱的30幅圖經手繪軌跡引導處理后再由“超級鷹”識別程序進行識別,結果無一識別,即在本次不完全統(tǒng)計中其識別率為0%。

      考慮到圖3中的字符缺乏背景干擾,實際應用中可加一些背景字符進行干擾,圖4即是加了背景干擾字符的“手繪軌跡引導驗證碼圖”示例。

      圖4 字符干擾的手繪軌跡驗證碼

      在圖4中,人類相對容易識別出驗證字符序列是“DA8J4”或“4J8AD”,但機器程序較難識別。因此,“手繪軌跡引導驗證碼圖”符合驗證碼設計目標,是一種較好的圖形文本驗證碼解決方案。

      但接下來的問題是:手繪軌跡是人工操作,效率低下,而實際應用中需快速、實時呈現驗證碼圖像,因此,必須使用計算機程序仿真實現“手繪軌跡引導驗證碼圖”才能滿足分布式信息處理的高效率需求。

      2 解決方案設計

      2.1 設計思路

      新的設計方案必須克服“驗證碼字符空間復雜度低”這一弊端,因此,提出如下設計思路。

      (1)機器程序難以識別驗證碼字符位置關系(即字符先后順序);

      (2)但人類可根據軌跡提示較容易識別驗證碼字符位置關系(即字符先后順序);

      (3)字符的位置是隨機的,每個隨機位置處輸出的字符是隨機的,兩個位置坐標之間的連接曲線形狀也是隨機的;

      (4)驗證碼字符相比干擾背景字符字體稍粗一些。

      2.2 驗證碼圖形生成過程設計

      從前面的分析可知,為了不讓機器程序輕易識別出字符的先后順序,需要加大字符的空間復雜度。

      以包含5個字符的驗證碼為例,其解決方案是:在指定區(qū)域內,隨機確定5個坐標點,在已確定的5個坐標處,輸出隨機字符。

      但這樣生成的隨機字符是無序的,沒有實際意義。但若在兩個順序相鄰的字符之間用隨機形狀的曲線連接即可形成曲線軌跡暗示。通過軌跡暗示,人類較容易識別字符順序,但機器程序難以識別。

      綜合以上分析,驗證碼圖形生成過程可描述如下(以包含5個字符的驗證碼圖形為例):

      ①在特定平面區(qū)域內,生成隨機坐標點1(1,1),并在該點處輸出隨機字符1及干擾字符;

      ②在平面區(qū)域內,生成隨機坐標點2(2,2),并在該點處輸出隨機字符2及干擾字符;

      ③以1為起點、2為終點,在起點與終點之間用隨機形狀曲線連接;

      ④在平面區(qū)域內,生成隨機坐標點3(2,2),并在該點處輸出隨機字符3及干擾字符;

      ⑤以2為起點、3為終點,在起點與終點之間用隨機形狀曲線連接;

      ⑥在平面區(qū)域內,生成隨機坐標點4(4,4),并在該點處輸出隨機字符4及干擾字符;

      ⑦以3為起點、4為終點,在起點與終點之間用隨機形狀曲線連接;

      ⑧在平面區(qū)域內,生成隨機坐標點5(5,5),并在該點處輸出隨機字符5及干擾字符;

      ⑨以4為起點、5為終點,在起點與終點之間用隨機形狀曲線連接。

      很容易發(fā)現:步驟①、②、③與步驟④、⑤、⑥以及步驟⑦、⑧、⑨的抽象邏輯是一樣的,假定該抽象邏輯為。

      則抽象邏輯可描述如下:

      ①在平面區(qū)域內,生成隨機起點并在起點處輸出隨機驗證碼字符及干擾字符;

      ②在平面區(qū)域內,生成隨機終點并在終點處輸出隨機驗證碼字符及干擾字符;

      ③在起點與終點之間用隨機形狀曲線連接。

      因此,在具體程序設計時,只要循環(huán)執(zhí)行抽象邏輯L就可以仿真生成“手繪軌跡引導驗證碼圖”。

      3 手繪軌跡引導驗證碼圖的仿真軟件實現

      3.1 軟件架構選擇

      在基于Web環(huán)境下,從軟件架構的角度來看,隨機驗證碼圖形的實現有兩種方案。

      第一種:由后臺服務程序生成隨機圖形并保存為圖形文件,再將圖形文件加載到客戶端讓用戶識別。

      第二種:將存儲在后臺的可生成隨機圖形的邏輯代碼加載到客戶端,代碼在客戶端執(zhí)行后生成可供用戶識別的驗證碼圖形。

      基于課題研究需要,研究人員的設計初衷是希望在web環(huán)境下由客戶端程序產生隨機圖形并呈現在網頁上,很顯然,這一設計目標與第二種軟件架構方案吻合。另外,第二種軟件架構方案相對第一種軟件架構方案來說,其實現成本更低。

      綜合考慮,選擇第二種軟件架構方案來進行仿真測試。

      3.2 隨機驗證碼圖形的實現

      實驗證明,HTML5框架下的canvas元素具備在網頁上繪制圖像及輸出圖形文本的功能。canvas擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法。canvas元素本質上是一個對象,其getContext()方法可繪制二維圖形。getContext()方法的可選參數是“2d”、“3d”。當前,唯一支持的參數是“2d”,它返回一個CanvasRenderingContext2D對象,該對象實現了一個畫布所使用的大多數方法。CanvasRenderingContext2D.fillText()用來填充文字,是Canvas繪制文本的主力方法;CanvasRendering-Context2D.bezierCurveTo()方法可在網頁畫布上繪制曲線。CanvasRenderingContext2D.bezierCurveTo()是Canvas 2D API繪制三次貝賽爾曲線路徑的方法,該方法需要三個點:第一、第二個點是控制點,第三個點是結束點。若控制點的坐標是隨機的,則生成的曲線形狀必然是隨機的。

      fillText(text,,)表示在坐標(,)處繪制文本“text”參數所指定的內容,fillText()方法在調用前是可以指定字體的。實驗表明,若字體指定為“Script MT”或“Freestyle Script”,則輸出的字符較接近手寫體,考慮到“Script MT”字體較“Freestyle Script”字體粗些,將驗證碼字符設為“Script MT”字體,而將干擾字符設為“Freestyle Script”字體?;谶@種思想,研究人員使用JavaScript編寫了自動化程序并生成了如圖5所示的驗證碼圖形。

      圖5 隨機產生的文本驗證碼

      從圖5可看出,每個干擾字符串中有一個字體較粗的字符。但問題是驗證碼字符串中的字符是有順序的,因此,在實現代碼中規(guī)定了起點,起點處繪制了一段半圓弧來標識,如圖5中,因字符“4”旁邊有一段半圓弧,所以為起點。根據以上規(guī)定,圖5中的正確驗證碼序列應為“4D57A”。

      實驗用自動化程序生成100個仿真“手繪軌跡引導驗證碼圖”,并交由“超級鷹”驗證碼識別平臺識別,結果沒有一個識別成功,這顯然符合CAPTCHA的“人類可識別但機器程序難以識別”的設計初衷。

      特別要說明的是:JavaScript代碼是以明文形式呈現在客戶端的,這本身就存在安全隱患。為了克服JavaScript代碼在前端為明文的特點,可利用JavaScript代碼混淆器對其進行處理。

      4 結語

      傳統(tǒng)的圖形文本驗證碼,由于其空間復雜度較低且字符序列默認從左至右,容易被驗證碼識別程序識別,因此存在較大安全隱患。實踐證明,只要在特定區(qū)域隨機分布字符并加上曲線軌跡引導,則會較大程度地增加字符空間復雜度,從而大大提升圖形文本驗證碼的安全保障作用。

      實驗數據表明:“手繪軌跡引導驗證碼圖”難以被機器程序識別且較容易被人類識別,這符合驗證碼的設計目標。

      考慮到手繪驗證碼圖形因其效率低而無實際應用價值,所以用計算機程序仿真實現“手繪軌跡引導驗證碼圖”。通過HTML5的canvas技術不僅能實現字符手寫仿真且能實現曲線軌跡手繪仿真。實驗證明,通過仿真實現的“手繪軌跡引導驗證碼圖”具有良好的安全性,達到了圖形文本驗證碼的設計目標,是一種有效的圖形文本驗證碼解決方案。

      猜你喜歡
      手繪字符起點
      手繪風景照
      尋找更強的字符映射管理器
      齊心手繪《清明上河圖》
      字符代表幾
      一種USB接口字符液晶控制器設計
      電子制作(2019年19期)2019-11-23 08:41:50
      消失的殖民村莊和神秘字符
      弄清楚“起點”前面有多少
      起點
      我的“新”起點
      手繪
      神州學人(2016年9期)2016-10-20 17:37:31
      404 Not Found

      404 Not Found


      nginx
      新泰市| 德昌县| 乌鲁木齐县| 鹰潭市| 宽城| 镇平县| 宁乡县| 怀集县| 云龙县| 宿州市| 屯昌县| 临西县| 晋中市| 炎陵县| 平塘县| 酉阳| 堆龙德庆县| 泾川县| 尖扎县| 郯城县| 新泰市| 浠水县| 天等县| 田林县| 三亚市| 清水县| 彰武县| 元谋县| 江门市| 申扎县| 株洲市| 绥芬河市| 大渡口区| 平遥县| 襄城县| 屯门区| 潞西市| 古田县| 遵化市| 绵阳市| 建平县|