生活中,不少人都會遇到需要投票。但往往投票的地方也是薄弱的,可能對投票來源沒有驗證的話,將會導致刷票,嚴重的話還會導致網站淪陷。
下面這篇文章就是講如何防刷票,雖然不是100%能防止,但是也能從根源上杜絕了一大批菜鳥對系統的破壞。我就直接轉過來了:) 剛剛做了一個刷票系統,感觸不少,剛開始也是遇到好多好多刷票的。經過了一次又一次的改正,基本上杜絕了刷票程式進行的刷票。
下面把具體刷票方面列舉出來:
1.首先
一個複雜的驗證碼是非常非常重要的,剛開始用了一個很簡單的小驗證碼,根本躲不過刷票程式的破解。所以在網上找了一個很複雜的驗證碼,連人工投票都得重新整理兩下。有需要的可以留下郵箱,我會在第一時間發過去。 2.因為投票都是實名制的,填寫社會安全號碼碼的,所以
社會安全號碼碼的驗證也是必要的。首先社會安全號碼碼必須為18位(一代身份證現在基本上見不到了),前17位必須為數字。代碼現在寫出來一個參考的 if(((strlen($sfz))!=18 and (strlen($sfz))!=15) or (!is_numeric(substr($sfz,0,strlen($sfz)-1)))) “$sfz”是接收到的社會安全號碼碼,這條語句後面可以添加一個提示方式。另外在
投票之前驗證當前身份證是否已經投過票,否則不予計票。 3.如果特別正式的可以使用註冊後再進行投票的機制,註冊的時候也應該對
註冊資訊進行判斷,註冊的時候必須添加驗證碼進行限制。 4.程式的的安全機制也很重要的,如果使用物件導向的程式,
必須把計票的函數設為private,防止SQL注入! 5.另外就是
使用cookie方式在用戶端進行時間限制,這種方式是防君子不防小人,專業刷票團隊肯定首先會想到這一點。但還是建議加上。 6.還有一個就是
IP限制,比如每個IP只允許投100票(考慮到一些公司使用一個大區域網路,公網IP都是用的一個,否則可能會出現不公平的現象)。 7.最後一個也是最重要的,
驗證碼輸入框那裡用非同步通訊進行實現。網頁初始驗證碼是不顯示的,點擊驗證碼輸入框再顯示出來驗證碼,而投票成功之後馬上unset驗證碼的SESSION。這樣就可以避過絕大多數刷票機。 本文大概提供了一些常規的思路,所謂防人之心不可無,你不能確保每個使用者輸入的都是安全的。最後說一句:檢查的時候記得白名單,這是必要的。