崔 勇,盧雪棟
(浙江師范大學(xué)教師教育學(xué)院,浙江金華321004)
隨著Internet的迅速發(fā)展,接入Internet的站點(diǎn)越來(lái)越多,這為我們?cè)诰W(wǎng)上對(duì)一些問(wèn)題的調(diào)查和評(píng)選奠定了基礎(chǔ)。目前,網(wǎng)絡(luò)投票已經(jīng)被廣泛地使用,它不僅給組織者節(jié)省了大量的人力、物力和財(cái)力,也使得網(wǎng)絡(luò)投票變得方便、快捷,大大降低了成本。盡管網(wǎng)絡(luò)投票有著無(wú)可厚非的優(yōu)勢(shì),但是也暴露出兩個(gè)主要問(wèn)題,一個(gè)是用戶匿名投票,另一個(gè)是用戶可以重復(fù)投票[1]。面對(duì)這些問(wèn)題,國(guó)內(nèi)有些研究者提出一些解決措施,其中利用session和cookies跟蹤用戶投票是主流的解決方法。但是cookies和session都有其缺陷,比如兩者都有一定的生命周期、用戶可以手動(dòng)刪除電腦中的cookies等[2]。近幾年,大學(xué)招生越來(lái)越多,為了便于管理,很多人為的事情都轉(zhuǎn)化為管理系統(tǒng)的形式。其中,投票也由原來(lái)的紙質(zhì)形式轉(zhuǎn)化為網(wǎng)絡(luò)投票形式?;谛@網(wǎng)的網(wǎng)絡(luò)投票與一般的網(wǎng)絡(luò)投票有一些不同:前者的用戶群體主要是學(xué)生和教師,而后者用戶群體不固定;前者一般在內(nèi)網(wǎng)進(jìn)行,而后者是外網(wǎng),前者相對(duì)于后者更容易確定投票用戶等。因此,基于校園網(wǎng)的投票安全性問(wèn)題有其獨(dú)特的解決方法。本文提出了3種解決辦法,第1種和第2種僅僅是相對(duì)于校園網(wǎng)而言的,而第3種解決辦法則是一般性措施。
基于校園網(wǎng)的投票不同于校外的一些網(wǎng)絡(luò)投票,前者的投票群體比較固定,主要是學(xué)生和教師,而后者比較混雜。因此為了避免外界人員投票以及幫忙刷票,投票人員需要使用自己的學(xué)號(hào)或者工號(hào)以及身份證進(jìn)行認(rèn)證。使用身份驗(yàn)證的前臺(tái)、后臺(tái)業(yè)務(wù)流程圖如圖1所示:
圖1 身份驗(yàn)證前臺(tái)、后臺(tái)業(yè)務(wù)流程圖
在后臺(tái)管理員操作界面,采用了數(shù)據(jù)批量導(dǎo)入的方法。首先,建立一個(gè)Student表,用以記錄學(xué)生投票的情況,如表1所示。其次,由于一般本科類大學(xué)都有20000以上的學(xué)生,數(shù)據(jù)量相當(dāng)龐大,而學(xué)生的信息都保存在excel中。由excel導(dǎo)入access/sql server中,采用了數(shù)據(jù)批量導(dǎo)入的方法(此處代碼略去)。
表1 Student表
在前臺(tái)用戶投票界面,用戶需要輸入自己的學(xué)號(hào)/工號(hào)以及身份證后6位數(shù)字才能選擇候選人。驗(yàn)證完畢,產(chǎn)生一個(gè)用戶學(xué)號(hào)的session值。然后用戶就可以選擇候選人,進(jìn)行投票,并將投票結(jié)果保存到selmenbers字段中。下面是前臺(tái)記錄用戶投票信息的一小段代碼:
第一個(gè)措施雖然能夠有效地避免非法用戶的投票,刷票等操作,但是對(duì)于合法用戶,依然可以在同一臺(tái)機(jī)器上使用別人的學(xué)號(hào)反復(fù)進(jìn)行投票。學(xué)校的Ip地址大都是通過(guò)Dhcp分配的內(nèi)部地址,空余地址比較多,在一段很短的時(shí)間內(nèi)Ip地址是不會(huì)改變的。因此,可以采用每隔兩小時(shí)同一個(gè)Ip地址只能投一次票的方法。此時(shí),可以增加一個(gè)IpLimit表,如表2所示:
表2 IpLimit表
該程序的基本思想是:記錄用戶的Ip地址、投票時(shí)間以及學(xué)號(hào)/工號(hào),寫到IpLimit表中。遇到相同的Ip地址,則判斷投票時(shí)間間隔,如果小于兩小時(shí),提醒用戶不可以投票;如果大于兩小時(shí)則刪除原來(lái)的Ip地址和時(shí)間,記錄該用戶的Ip地址和投票時(shí)間。該程序的流程圖如圖2所示:
圖2 每隔一段時(shí)間同一Ip地址只能投一次票流程圖
該技術(shù)的具體實(shí)現(xiàn)代碼如下,首先需要定義幾個(gè)函數(shù):
然后,將這幾個(gè)函數(shù)插入到指定的程序位置中:
其次,在將投票信息保存到數(shù)據(jù)庫(kù)中之前,需要調(diào)用函數(shù)二:
最后,在所有驗(yàn)證工作都結(jié)束后,將投票信息保存到數(shù)據(jù)庫(kù)中后,調(diào)用函數(shù)三:
以上兩個(gè)措施很好地解決了刷票的問(wèn)題,但是SQL注入也是一種常用攻擊的方法,因此不可小覷。通過(guò)此方法一些非法用戶檢索他人的數(shù)據(jù),改變服務(wù)器的設(shè)置或者有意破壞他人的服務(wù)器。SQL注入式攻擊不是SQL的問(wèn)題,而是不適當(dāng)?shù)某绦蛟斐傻摹?/p>
一般有3種解決辦法:替換輸入字符串中的危險(xiǎn)字符和禁止用戶輸入危險(xiǎn)字符[3],如果是SQL數(shù)據(jù)庫(kù),還可以采用存儲(chǔ)過(guò)程[4]。采用了第1種辦法,主要思路是定義一個(gè)過(guò)濾非法參數(shù)的函數(shù),這些非法參數(shù)都保存在一個(gè)字符串中,最后使用一個(gè)循環(huán)結(jié)構(gòu)驗(yàn)證提交的參數(shù)是否在這個(gè)字符串中,如果在,則為非法參數(shù),并且報(bào)錯(cuò),反之亦然。這個(gè)函數(shù)比較簡(jiǎn)單,在這里就不將代碼寫上。
通過(guò)以上3種辦法,筆者將該投票網(wǎng)站很好的運(yùn)用到我校各項(xiàng)投票活動(dòng)中,使得學(xué)校相關(guān)投票工作安全、公平的進(jìn)行。但是,沒(méi)有絕對(duì)安全的系統(tǒng),筆者希望在后面的工作中借鑒別人的一些思路和自己的思考,再加入一些安全措施。如一些研究者提出的基于CA認(rèn)證的投票技術(shù)較好地解決了一些安全問(wèn)題,保證了投票者的合法性,保證了投票的公正性,真實(shí)性和有效性,實(shí)現(xiàn)了一人一票[5]。但是如果要徹底解決安全問(wèn)題,還需要考慮網(wǎng)絡(luò)及相關(guān)硬件的安全性和可靠性,同時(shí)必須加強(qiáng)投票系統(tǒng)操作人員的管理。
基于校園網(wǎng)的投票具有參與人員多、影響面廣等優(yōu)點(diǎn)。筆者結(jié)合校園網(wǎng)的特性以及自己的開(kāi)發(fā)經(jīng)驗(yàn),提出了一些安全措施,希望給相關(guān)人員一些幫助,在研究中也存在一些不足,懇請(qǐng)給予批評(píng)和指正。
[1] Andrea Pasquinucci.Web voting,security and cryptography[J].Computer Fraud& Security,2007,(3):7 - 8.
[2] 楊興凱,劉宏.基于web的網(wǎng)上投票安全策略[J].計(jì)算機(jī)時(shí)代,2001,(3):24-25.
[3] 尚俊杰.網(wǎng)絡(luò)程序設(shè)計(jì)—ASP(第二版)[M].北京:清華大學(xué)出版社,2011:198-199.
[4] 吉根林,崔海源.web程序設(shè)計(jì)(第二版)[M].北京:電子工業(yè)出版社,2006:230.
[5] 章美仁.基于CA的網(wǎng)上投票技術(shù)安全性研究[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(11):121-122.