刷票行爲
,一直以來都是個難題,沒法從根本上防止。算法
可是咱們能夠儘可能減小刷票的傷害,好比:經過人爲增長的邏輯限制。服務器
基於 PHP
,下面介紹防刷票的一些技巧:curl
一、HTTP_REFERER
: 校驗 $_SERVER['HTTP_REFERER']
。可僞造,使用 CURL
。異步
curl_setopt($ch, CURLOPT_REFERER, 'HTTP://www.baidu.com');(攻擊手段)
二、IP限制
:加上 IP
投票限制。可僞造,使用 CURL
。加密
$ip = ***.***.***.***; $header = array( "CLIENT-IP:{$ip}", "X-FORWARDED-FOR:{$ip}", ); curl_setopt($ch, CURLOPT_HTTPHEADER, $header);(攻擊手段)
三、User-Agent
:校驗 $_SERVER['HTTP_USER_AGENT']
。可僞造,使用 CURL
。url
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0)");(攻擊手段)
四、驗證碼
:採用很是複雜的驗證碼,能夠防止一些菜鳥攻擊者。code
a:可是專業刷票機能夠攻破。若是不用驗證碼,投票基本就歇菜了。 b:驗證碼獲取方式,採用異步加載,即點擊輸入框時,纔去請求。 c:投票成功後,刪除驗證碼的 Session。
五、登陸
:用戶必須登陸才能投票。ip
a:能夠攻破,寫程序不斷註冊新用戶,而後用來投票。(攻擊手段) b:指定大於某個 UID 的用戶,或者某段時間內活躍的用戶,才能進行投票。(預防對策)
六、限時投票
:投票程序,只在某個時間段內開放。不然,對方半夜刷票,你咋辦?io
a:從 早 8 點 至 晚 23 點。(預防對策)
七、投票間隔
:用戶投票後,須要隔多長時間才能繼續投。驗證碼
a:不少投票站點基本上都有這個限制,可是對於更改 IP的攻擊,就沒辦法了。 b:針對 UID 限制,能夠有效防止攻擊,可是可使用批量註冊馬甲用戶。
八、投票結果展現
:延遲展現,友好展現。
a:頁面上投票,JS 立馬加1,可是刷新頁面,不必定立馬展現最新投票結果。 b:返回狀態給頁面(感謝您的投票!或者 投票成功!至於有沒有成功,另說了!)
九、補票邏輯
:常見於一些軟件評選之類的投票。
a:有時候軟件廠商會爲了讓本身的票數高一點,會私下給活動舉辦商 $,後臺進行補票。 b:後臺跑腳本,採用 IP 庫,緩慢平滑的增長票數。
十、扣量邏輯
:常見於一些軟件評選之類的投票。
a:這是個殺手鐗,後臺跑腳本實時監控異常增加(刷票)的項,而後實施扣量邏輯。 b:即對於這個項,投 10 票纔算一票。
十一、Cookie
:經常使用的手段。比較低級。
a:投票後,在客戶端寫入 Cookie,下次投票時判斷 Cookie 是否存在。 b:可是,這種方式很是容易攻破,由於 Cookie 可刪除。
十二、加密選項 ID
:對一些投票選項的ID,進行隨機加密。
a:加密算法,加Salt,而且設置有效時間,好比5分鐘內。 b:服務器端進行解密而且驗證。
1三、人工刷票
:沒辦法防。。
a:僱傭了一批水軍,進行刷票,這個真沒轍,人家確實是花了血本的。