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