遭遇刷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流量軟件影響統計的。可能由於項目的特殊性,這些方案並不一定適合所有的情形,畢竟這些刷流量軟件大多都是些草根站長使用並且通常都是刷自己的網站的:),這裡也希望院子裡的網友也提提好的建議,如何應對這些刷流量軟件,分享下經驗。