1. 程式人生 > >如何設計一套較完善的網路投票系統

如何設計一套較完善的網路投票系統

那麼怎樣的投票系統能比較有效的杜絕人為作弊呢,作者認為應該從以下幾個方面去考慮:

一、採取有效的IP限制,一個IP只能投一票。目前網路上絕大部分的投票活動都是一個IP一天可以投一票,少數沒有IP限制(採取客戶端Cookie限制的也屬於沒有IP限制),極個別的才是一個IP只能投一票。如果不是為了增加投票網站的流量或點選率,作者認為投票活動應該採取嚴格的IP限制,一個IP參與一次足夠了,不需要重複投票。在獲取客戶端IP方面,應取消使用HTTP_X_FORWARDED_FOR,因為HTTP頭的"X_FORWARDED_FOR"屬性很容易偽造客戶端IP地址,個人認為還是隻支援REMOTE_ADDR比較好。

二、加入驗證碼。驗證碼能比較有效的杜絕網路機器人,在一些註冊、登入介面中我們經常可以看到。網路投票活動中,也應該加入驗證碼,以防止使用投票軟體作弊。但是作者不推薦使用中文驗證碼,為方便投票網民的錄入,只要英文、數字就行了,隨機變形、旋轉,這樣也很難被軟體識別。如下圖:

三、投票資料每次提交都不一樣。如果每次投票資料都不一樣,那就很難使用軟體傳送固定資料包了。

四、多級跳轉,並使投票網址動態變化。這樣做的好處就是使投票目的網址能不斷變化,用軟體向固定地址傳送資料包就沒有意義了。

五、要求在投票頁面停留一段時間後才能投票。比如,必須訪問投票頁面3分鐘後投票才有效,但是這個時間不能使用客戶端指令碼(

VBScriptJavaScript)來限制,使用Session驗證才有實際意義。

六、設定每天投票數量上限。估算投票網站的流量,制定一個每天投票數量的上限,如一天最多隻能為一個投票物件投1000票,超出的不記錄。

七、設定投票最短時間間隔。為了防止對某個投票物件的集中投票,可以限定1分鐘之內不能對同一個投票物件投票,即使更換IP也不可以。

八、其他方法。
1
、如可以根據投票速度設定一個反轉開關,當速度到達多少票/分鐘時,每投一票票數減一。
2
、不反饋投票成功或失敗的資訊,票數不公開或不實時更新。
3
、回答一些有關投票的驗證問題等。