陳欣余
(浙江省杭州第二中學 浙江 杭州 310052)
為了防止人為利用計算機進行大批量注冊,大批量的散布商業(yè)廣告,惡意評論,利用枚舉嘗試出用戶密碼,侵犯用戶隱私,人們用驗證碼技術嘗試避免這些不良行為。目前已經廣泛運用的有傳統(tǒng)型驗證碼、點選型驗證碼、滑動型驗證碼等。這些驗證方式雖然都能有效的區(qū)分人機操作,但是正常情況下的用戶每次登錄都需要進行驗證,比較的繁瑣。因此本文主要設計了一種智能驗證碼,運用瀏覽器指紋,提取用戶使用的瀏覽器特征,使白名單中的正常用戶避免驗證,只對黑名單用戶進行強有力的驗證,有效的判別正常與異常用戶,優(yōu)化了人機識別的機制,使用戶操作更便捷。
驗證碼就是將一串隨機產生的數(shù)字或符號,每次刷新頁面的時候產生不同的序列,之后生成一幅圖片,圖片里加上一些干擾元素,由用戶肉眼識別其中的驗證碼信息,然后輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。驗證碼通常用在用戶登錄或留言的網(wǎng)頁界面中,當用戶在瀏覽器端輸入驗證碼之后,將用戶名、密碼和驗證碼等信息提交到服務器,服務器端獲取用戶提交的數(shù)據(jù)之后,判斷用戶提交的驗證碼字符與服務器端保存的字符是否相同。如果相同,則通過對用戶提交信息的驗證,否則將提示沒有通過驗證的提示信息。
驗證碼的出現(xiàn)主要是為了進行人的行為與計算機行為的自動識別,用于用戶的身份識別并防止計算機對網(wǎng)站與應用的自動攻擊。以下列舉了幾種攻擊行為以及運用計算機設計惡意程序操作的后果。
(1)現(xiàn)實中的注冊和登錄環(huán)節(jié)中,存在一些惡意的程序,會實現(xiàn)自動,大批量的注冊,搶占賬號,有可能會導致連續(xù)相同信息的發(fā)表,對程序惡意攻擊。
(2)同樣存在惡意程序對特定賬號不斷進行密碼嘗試,惡意程序可以通過窮舉法在所有的字母組合中不斷的嘗試來破解用戶的密碼。但是,如果在用戶登錄的時候加上驗證碼技術,使得每一次身份驗證都有動態(tài)的信息在改變,由于驗證碼每次產生的字符串都是隨機的,所以簡單粗暴的攻擊工具就無能為力了。
隨著安全技術的發(fā)展,驗證碼已有各種各樣的形式,大體上分為以下三種類型,分別是傳統(tǒng)驗證碼、點選型驗證碼以及滑動型驗證碼。
1.3.1 傳統(tǒng)驗證碼
登錄系統(tǒng)會隨機產生一串數(shù)字或符號,每次刷新頁面的時候產生不同的序列,之后生成一幅圖片。再將字符變色,旋轉,扭曲。這種區(qū)分人機操作的方式的優(yōu)點是對于程序設計來說較方便,但對于一部分用戶來說,有時圖片的變形很難快速辨認,這給用戶造成了不便。
1.3.2 點選型驗證碼
系統(tǒng)將隨機給出一組圖片,要求用戶按照指令有順序地點擊其中的一張或多張圖片,這種驗證方式很新穎,所以它的優(yōu)點在于實現(xiàn)了更好的人機交互,但缺點也很明顯,用戶完成指令所花費的時間較長,同時它也沒有考慮到特殊人群是否能讀懂并完成指令。
1.3.3 滑動型驗證碼
滑動型驗證碼的操作步驟比點選型簡單,它要求用戶移動滑塊將拼圖滑動到正確的位置使其拼成一塊完整的圖。這種滑動滑塊的方法也是計算機不容易實現(xiàn)的。但在實際體驗的過程中雖然是人為操作,但也有滑動位置錯位等系統(tǒng)識別的失誤,使得用戶要反復操作,費時費力。
瀏覽器指紋是一種身份追蹤技術,當用戶通過瀏覽器來訪問某一網(wǎng)站時,便會記錄瀏覽器的許多種特征,大量的這些特征就可以標識一個用戶,其唯一性就像指紋一樣。瀏覽器指紋就是通過瀏覽器各種屬性的綜合,能夠提取到足夠有價值的信息,通過將提取的屬性進行字符串拼接,然后通過哈希計算將這個字符串轉化成128位十六進制的字符序列。這個128位的字符序列就作為用戶的唯一標識。
瀏覽器有眾多的屬性,可以生成瀏覽器指紋,瀏覽器指紋特性通常包含字體、插件、用戶代理、cookies是否開啟、時區(qū)等,各種特征的提取方式不盡相同,瀏覽器發(fā)送請求時,會在HTTP請求頭中包含一些信息,包含用戶代理一級可接收的數(shù)據(jù)的類型,服務器可以從HTTP請求頭中獲取User Agent和HTTP_Accept,cookies的設置信息、所屬時區(qū)、插件信息以及語言等可以通過javascript直接調取瀏覽器相關方法獲取,系統(tǒng)安裝的字體列表可以通過 fl ash結合JavaScript的方法獲取。
以上提到的傳統(tǒng)型,點選型和滑動型驗證碼是目前最普遍的的驗證方式,這些驗證方式的設計原理很簡單,但最重要的一項不足之處在于,這些驗證方式的用戶體驗較差?;旧纤袘密浖系牡卿洸襟E中都有驗證這一環(huán)節(jié),對于用戶來說操作次數(shù)太多,不簡便。而智能驗證碼是為了解決以上的問題設想出來的優(yōu)化用戶體驗與人機交互的機制。簡單的概括,它設定的規(guī)則能避免對正常用戶的驗證,對普通用戶進行普通驗證,只對異常用戶進行更強有力的認證,優(yōu)化了用戶體驗。
圖1 系統(tǒng)設計流程
系統(tǒng)設計的步驟如下:系統(tǒng)將設立一個白名單與黑名單,將判斷出來是穩(wěn)定用戶的信息存入白名單中,將異常用戶的信息存入黑名單。用戶在登錄時,會通過腳本獲取用戶的瀏覽器指紋信息,之后將獲取到的信息傳入到服務器中。首先判斷該用戶是否在白名單中,如果在則不顯示驗證碼即可直接登錄。如果不在,則程序繼續(xù)判斷是否在黑名單中。如果在黑名單中,則加強驗證,如果不在,則繼續(xù)判斷是否在數(shù)據(jù)庫中。如果判斷出該用戶還未出現(xiàn)在數(shù)據(jù)庫中,那么該用戶是新用戶,下一步操作是儲存新用戶信息,并顯示驗證碼。如果判斷出該用戶已經在數(shù)據(jù)庫中,則繼續(xù)顯示驗證碼,并存儲此次登錄的信息,以便確定是把該用戶移入白名單中,或放在普通數(shù)據(jù)庫中,還是存入黑名單中。白名單以及黑名單設立的標準就是:若用戶此次登陸正常,則正常值加 1。若此次登錄異常則異常值加 1。系統(tǒng)會記錄總的登錄次數(shù)。經過一段時間,若正常值占總登錄次數(shù)的比例達到100%,則將該用戶移入白名單。若異常值占比達到30%(這個比例可以在后續(xù)優(yōu)化過程更改)則移入黑名單中。若兩者都不是,則仍將該用戶信息存在數(shù)據(jù)庫中。這樣的設計也實現(xiàn)了白名單中的用戶數(shù)量從零到有。同理若白名單中的用戶出現(xiàn)異常,其存儲的異常值占比達到了設定的閾值也會被移出白名單。簡單的說,智能驗證碼設計的原理是完全信任白名單中的用戶,不對這些正常用戶進行人機操作的辨別,只對異常用戶進行人機識別,簡便了正常用戶的操作。
本文在第一部分介紹了什么是驗證碼以及驗證碼的發(fā)展,第二部分提及驗證碼運用到的相關技術即瀏覽器指紋,第三部分將介紹新的驗證方式--智能驗證碼的設計,包括其原理以及運行的流程示意圖,智能驗證碼避免了正常用戶的驗證操作,大幅度提升了用戶體驗。由于信息安全問題受到越來越多人的關注,驗證碼技術應運而生,本文所設計的智能驗證碼技術通過瀏覽器指紋對正常用戶跳過驗證環(huán)節(jié),對惡意用戶實行下一步更強的認證,對普通用戶實行簡單認證。這樣的操作提升用戶體驗。然而本文提出的基于瀏覽器指紋的智能驗證碼的設計也有一些不足的地方,比如本系統(tǒng)在判斷用戶是在白名單中還是黑名單中的時候,判定維度較單一,容易出現(xiàn)誤判的效果,需要在未來的實踐中完善。