賴春江,蘇哲新
(東莞廣播電視臺陽光網站,廣東 東莞 523129)
網絡調查及投票是伴隨互聯網的發展而出現的新的調查及投票方式,這種新方式打破了傳統投票在時間和地域上的限制,拓寬了參與人群的范圍,尤其在電視節目與觀眾互動中被廣泛應用。由于投票的數據基本上是記錄在數據庫里,使得投票結果的統計和分發變得便捷和及時。但由于HTTP協議本身的缺陷和網絡參與者身份確認的復雜性,也使其極易遭受作弊攻擊,出現“刷票”行為。近年來,東莞陽光網承辦了多次大型網絡投票活動,筆者在這些活動的技術工作中積累了一定實踐經驗,針對在實際工作中發現的不同攻擊手段進行深入分析,并提出有效的解決方案。
超文本傳輸協議HTTP的設計目的在于支持超文本的傳輸,客戶端向HTTP服務器發送請求,HTTP服務器接收到請求后將相應資源發回給客戶端。因為每次的請求和響應都是相對獨立的,所以服務器和客戶端都沒有必要記錄這一過程。一般而言,一個URL對應著唯一的超文本資源,HTTP服務器對于不同的客戶端的同一個URL的請求也會返回相同的超文本。因此,沒有必要記錄用戶的行為狀態,HTTP協議被設計成無狀態的連接協議。
網絡投票一般是指用戶通過Web頁面在客戶端瀏覽器填寫投票表單,然后提交給服務器進行記錄處理的一種方式。網絡投票往往需要選擇候選選項(候選人或候選單位等)、投票人的身份信息(姓名、身份證號碼等)。由于投票的結果可能涉及各參與方的利益,候選人往往會為了影響投票結果而進行各種各樣的作弊“刷票”行為。因此,為了保證投票結果的公平有效,投票活動組織者需要對投票行為進行有效地控制,其方法一般有要求填寫表單的身份證號碼字段進行身份證號碼合法性校驗、IP地址投票限制和驗證碼等。
一般來說,重大的網絡投票一般都需要投票者填寫表單時提交合法的身份證號碼才能進行投票,并以身份證號碼來作為甄別是否重復投票的依據。但互聯網上的網絡投票一般不可能跟公安系統的身份證數據庫進行對接,因此,投票處理程序只能從邏輯上根據客戶端提交的身份證號碼進行算法有效性的校驗,只要客戶端提交的身份證號碼通過算法校驗,投票程序就認為這是一個合法的身份證號,并且若投票記錄數據庫里沒有該身份證號碼的投票記錄就允許其進行投票。因此作弊者很可能對該投票程序進行任意攻擊和作弊“刷票”。
為了防止作弊者不斷地進行作弊“刷票”,投票處理程序往往對同一個IP地址在特定時間段內的投票總數進行限制。服務器端對客戶端IP地址一般會采用兩種方式,一種是通過HTTP會話的REMOTE_ADDR獲取跟服務器通信的客戶端IP地址,如果投票程序通過這種方式獲取客戶端IP,并對每個IP在某一時段內的投票總數做了限制,作弊者必須擁有相當數量的公網真實IP資源才能對投票程序發起影響結果的攻擊;另一種是先通過HTTP頭的X_FORWARDED_FOR字段來獲取通過代理服務器訪問投票服務器的客戶端真實IP,但是否可以獲取客戶端真實IP取決于代理服務器是否允許服務器端獲取客戶端的真實IP,同時如果客戶端不通過代理服務器訪問投票服務器,投票服務器同樣獲取不了客戶端的IP。一般來說,Web程序開發人員為了更加準確地獲取客戶端的IP地址往往會先試圖去獲取X_FORWARDED_FOR的值,獲取失敗后再去獲取跟服務器直接通信的主機IP。
由于X_FORWARDED_FOR是通過客戶端提交的HTTP頭來獲取,而客戶端的HTTP頭的數據可以在提交前進行任意修改,因此,Web程序開發人員想盡可能地通過穿透代理服務器獲取客戶端真實IP地址的美好愿望給投票作弊者敞開了大門,客戶端通過修改每次提交的HTTP頭里的X_FORWARDED_FOR字段值就能成功突破IP投票數限制進行任意投票。
為了解決HTTP協議的無狀態性給Web應用程序帶來的問題,產生了兩種用于保持HTTP連接狀態的技術,一個是Cookie,而另一個則是Session。由于Cookie值存儲在客戶端的硬盤上,同樣存在與HTTP頭一樣被修改的危險,因此,數據保存在服務器端的Session技術則顯得更加安全可靠。網絡投票程序為了防止客戶端利用特定軟件通過重復提交投票表單信息進行作弊,往往使用圖片驗證碼技術,在服務端生成圖片驗證碼信息并通過Session來對客戶端輸入進行認證,理論上只要驗證碼信息不被客戶端作弊程序破解,客戶端就無法實施大規模的批量刷票作弊行為,從而保證投票的安全可靠。
圖片驗證碼技術的實施,提高了網絡投票作弊的技術門檻,在一定程度上保證了投票的安全。同時,投票驗證碼實施技術的復雜性也對Web開發人員提出了更高的技術要求。目前,基于圖片驗證碼生成技術的難度限制,絕大部分網站都使用了阿拉伯數字和英文字母的圖片驗證碼,并且生成的圖片上的干擾線和噪點并不多。針對數字和英文字母的破解算法很容易獲取,并且破解率比較高,其攻擊原理如下:
1)先分析目標驗證碼圖片的驗證碼類型(數字、字母或組合型等)、驗證碼位數、字符位移范圍、字符旋轉范圍、干擾線及噪點、前景色、背景色、圖片的大小等。
2)根據驗證碼類型確定相應的破解字符范圍及各字符圖片獨特的像素值。
3)根據圖片的前景色、背景色、干擾線及噪點情況去除圖片的干擾線、噪點及背景色。
4)根據驗證碼位數、字符位移范圍、字符旋轉范圍對圖片進行字符截取。
5) 將截取的字符圖片跟預先確定的破解字符范圍內的字符圖片進行像素匹配,匹配像素命中率最高的字符就是驗證碼字符。
通過對網絡投票攻擊原理及手段的技術分析,可以知道目前要完全通過技術手段杜絕網絡投票的作弊行為難度很大。但若對現有技術進行改進,并組合使用更加難破解的圖片驗證碼、單一IP投票數限制及身份證號碼校驗等多種防范手段,可以大幅提高作弊成本并降低其成功率,使其作弊行為不足以影響投票結果。通過同步采取以下幾種手段,可以基本堵塞網絡投票中的漏洞。
第1種防范手段是采用復雜干擾像素背景中文圖片驗證碼技術。這是最核心的防范手段,通過本網站近年來多場大型網絡投票的檢驗,效果明顯,投票結果得到社會各界的公認。該手段采用圖片驗證碼技術,很好地彌補了HTTP協議無狀態連接的缺陷。但其缺點是實施技術門檻高,一般網絡程序只能生成數字和英文字母驗證碼,降低了攻擊破解技術門檻,這需要對驗證碼生成技術進行改進。目前,不少允許用戶上傳圖片的網站都會對用戶上傳的圖片疊加網站版權信息的“水印”文字或者圖片,因此可以把該技術運用到中文驗證碼的生成上來。該技術把驗證碼字符疊加到背景圖片上,因此可以根據文字前景顏色選擇干擾性強的背景圖片,同時對驗證碼的字符集可以簡單地進行大范圍擴充,只要服務器上字符集有字符生成,甚至可做出如 “10除以2加3等于幾”這樣的問題式驗證碼。用于生成 “水印”的技術一般使用Web Server組件,目前基于ASP,PHP,Java等Web開發語言的組件很容易得到,技術實現的門檻相對也比較低。下面簡要介紹其防范流程:
1)預先制作干擾性強的復雜背景圖片集,如制作20張圖片。
2)隨機生成驗證碼值,并寫入Session里。為了投票客戶端輸入的方便,這里只選擇了GB2312字符集的第1級常用漢字3 755個。
3)隨機選擇背景圖片、字體、前景色及驗證碼位移值,把驗證碼疊加到圖片上。
4)為了防范攻擊程序不斷重復獲取驗證碼來進行攻擊,在生成驗證碼后隨即把系統當前時間當作驗碼生成時間寫入Session里,并在投票程序里提交延時設置。
第2種防范手段是除了使用難破解的驗證碼外,可以直接獲取跟服務器通信的主機IP地址,而不用通過獲取HTTP頭的X_FORWARDED_FOR字段來獲取客戶端IP地址,避免IP地址偽造攻擊,然后根據需要進行一定的IP投票數限制,使得作弊攻擊者必須擁有大量的真實公網IP地址資源,大幅提高作弊門檻和成本。
第3種防范手段是進行投票時要求客戶提交個人信息,如提交身份證號碼等,并對其進行合法性校驗。該方法對使用投票作弊軟件的攻擊者往往作用不大,但能增加其手動刷票的作弊成本。
第4種防范手段是對每次投票都進行詳細記錄,如投票對象、投票時間、來源IP、個人信息等,以便發現作弊攻擊時進行查找和清理。
由于HTTP協議本身的弱點及現有技術的限制,目前難以完全通過技術手段杜絕網絡投票的作弊行為,但通過對現有技術的改進,根據具體情況靈活使用不同的技術手段,可以大幅提高網絡投票的作弊成本,降低作弊行為的成功率,從而保證投票結果的真實、公正、可靠。