遭遇刷IP、刷流量軟體的困擾
本以為有效控制同一天對同一個IP僅算一次的方案就能有效防止使用者多次重新整理地址作弊的現象,我得承認涉世未深孤陋寡聞 - -,一直忽視現在的刷流量軟體如此的強大,我們的項目也遭遇使用刷流量軟體的情況,因而產生不少垃圾資料,甚至影響統計的準確性。
為解決這種情況也特意下載了兩款知名度比較高的刷流量軟體“流量寶”和“流量精靈”瞭解一下,不用不知道,一用確實是個好東西。
這兩款軟體的原理都一樣,估計其它的也差不多吧,就是利用網路互訪原理,利用網路節點地區差異性,使用者隨機性,使訪問效果真實有效,也就是你的電腦掛著一個刷流量的軟體的時候,你的地址會被也在掛機的所有使用者訪問,當然人家幫你刷的同時你也在幫人家刷,這一切功夫軟體都在背後幫你完成,掛上幾分鐘馬上就能看到流量慢慢上來,說了不少廢話,下面也說說對策。
應對方案
鑒於部分網友不喜歡看全文就下斷論的情況,這裡強調一下,所有提交的背景資料都有做IP檢查的,而本文討論的就是基於這種情況下被刷IP的應對方案。
方案一:通過Ajax非同步提交資料(無效)
起初推廣地址被點擊時在後台解析頁面是會先記錄訪客的IP、時間等資訊,這種方式顯然很難防不了刷流量軟體,因此便考慮通過Ajax非同步提交資料的形式。
剛開始還是低估這些流氓軟體,以為只是通過簡單的類比http請求不會觸發js指令碼,所以第一種方案是通過頁面載入完成後,通過ajax非同步提交記錄請求,結果無效,實驗證明此方式僅對比較低級的機器人有效;
方案二:判斷請求的用戶端瀏覽器視窗寬度或高度(無效)
通過方案一可推測這些流量軟體不是單純的類比http請求, 也就是通過真實的瀏覽器請求的,但我掛機“被”幫別人刷流量的同時,並未看到任何網頁的開啟,只能通過抓包工具看到不停的請求,那我猜想這些刷流量軟體是不是隱藏了一個瀏覽器視窗,或者將瀏覽器視窗設定得很小很小……對此猜想我通過js判斷用戶端當前開啟的瀏覽器視窗地區是否大於某個值(如寬300px,高200px,相信沒什麼人會用這麼小的地區看網站吧~),超過一個下限值才通過Ajax提交資料。
結果還是無效,對此也特意寫了小程式記錄每一個請求的瀏覽器類型、視窗大小……,結果令我無語,請求的瀏覽器可視地區都很正常,甚至解析度很多比我的顯示器還高,自我鄙視ing……
方案三: 通過滑鼠事件作為正常訪問的依據 (有效)
通過幾番實驗,得出的結論是這些機器人並不簡單,但畢竟是機器人,那就考慮通過滑鼠事件判斷是否機器人,如mousemove、mousedown、mouseover等,當然也可以通過讓使用者選擇點擊按鈕等認為操作作判斷依據(當然要考慮操作體驗好不好),下面放個簡單指令碼:
複製代碼 代碼如下:<script src="jquery-1.4.1.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
var movetimes = 0; //移動次數
$(document).mousemove(function(even) {
movetimes++;
if (movetimes > 100) { //事件被執行次數大於n,設定個比較保守的值
$(document).unbind("mousemove"); //解除mousemove綁定
//此處執行非同步提交資料
alert("非同步提交記錄請求!");
}
});
});
</script>
總結:
經過多番嘗試,最終在第三種方案取得成效,但也不排除日後這些機器人的不斷改進而攻破這個簡單檢驗環節,畢竟道高一尺魔高一丈。但機器人畢竟是機器人,不妨多增加點人為操作的條件因素作判斷,估計還是能防止這類刷IP流量軟體影響統計的。可能由於項目的特殊性,這些方案並不一定適合所有的情形,畢竟這些刷流量軟體大多都是些草根站長使用並且通常都是刷自己的網站的:),這裡也希望院子裡的網友也提提好的建議,如何應對這些刷流量軟體,分享下經驗。