Google分析language垃圾資訊

IT技術精選文摘發表於2018-07-03

640?wx_fmt=gif

最近一段時間,我在Google Analytics(以下簡稱GA)中檢視網站資料時,發現一個非常可疑的資訊:


640?wx_fmt=png

這什麼鬼?

“language”這一項一般是 “zh-tw”, “zh-cn”, “en-us”, “es”, “fr”等,它是由使用者瀏覽器設定的。但使用者瀏覽器不可能把語言項設定為這些:

Secret.ɢoogle.com You are invited! Enter only with this ticket URL. Copy it. Vote for Trump! o-o-8-o-o.com search shell is much better than google! Vitaly rules google ☆:。゜゚・ヽ(^ᴗ^)ノ・゜゚。:☆ ¯_(ツ)/¯(ಠ益ಠ)(ಥ‿ಥ)(ʘ‿ʘ)ლ(ಠಠლ)( ͡° ͜ʖ ͡°)ヽ(゚Д゚)ノʕ•̫͡•ʔᶘ ᵒᴥᵒᶅ(=^ ^=)oO Congratulations to Trump and all americans

分析請求

很明顯,這是一種新的 spam(垃圾資訊),希望吸引目標人群(可能就是我們這樣的網路管理員)的注意力。

仔細地觀察這些請求,會發現幾個特點:

  1. 請求數有明顯的波峰,在幾天內會達到高峰,然後又降下去

  2. New Sessions 的比例非常高,達到了86%以上

640?wx_fmt=png

分析其它受攻擊的欄目

仔細檢視 GA 統計專案的這些請求,發現 referrer 一欄也比較可疑地出現了這些:

motherboard.vice.com addons.mozilla.org webmasters.stackexchange.com blackhatworld.com thenextweb.com abc.xyz lifehacĸer.com ...

這其中有一些非常正規的域名。比如abc.xyz是Google的母公司alphabet的官網,thenextweb.com也是一個開發者媒體。

這些網站本身沒有問題,但其實該網站上並沒有任何一個連結指向我的部落格,更談不上我的訪客“來自”(referral)該網站了。當我訪問回去,發現並沒有實際上的連結,只是廣告,倒也罷了,更可怕的是可能會有釣魚、病毒等。

綜上,這是一波二維攻擊(假的語言項和假的 referral 項),目的是吸引你的注意力。

分析攻擊怎麼產生的

總的來說,這種垃圾資訊有兩種攻擊方式。一種是真正會訪問你的網站的網路爬蟲;另一種是不訪問你的網站,而是將假冒的“點選”事件直接傳送到GA伺服器。事實上,第二種攻擊方式由於成本低,因而更加常見。

GA 的統計邏輯是,當使用者訪問你的網站,會在前端執行一段 JavaScript 程式碼,然後把使用者的一些訪問情況通過 HTTP 請求傳送給 GA 伺服器,告訴 GA 發生了一次“訪問”。而這個 HTTP 請求可以很容易地被偽造,所以垃圾資訊傳送者無需真的訪問你的站點,它直接傳送大量 HTTP 請求即可達到目的

除了 HTTP 請求,GA 還支援更方便的Measurement Protocol ,開發者可以傳送一個原始資料(raw data)給GA,來一次性傳輸大量使用者行為。這個協議的初衷是讓開發者可以統計所有環境下的使用者行為,比如開發者可以將離線狀態下的使用者行為記錄下來,當線上時一次性傳送。或者當內網不支援外部訪問時,先記錄下使用者行為,隨後再定時一次性傳送到 GA。

初衷是好的,不幸的是,這個過程仍然是無需認證身份,所以更方便了垃圾資訊傳送者。垃圾資訊傳送者可以通過一次請求即傳送大量假資料,他只需要得到你的 UA-ID(UA-XXXXXXX-XX)即可。

在這個原始資料包中,一切皆可偽造。Hostname?沒問題!Referral?全改了!URL path?當然也可以改……

如何避免

對網站主來說,這種垃圾資訊有幾點危害:1、浪費時間,就像傳統垃圾郵件一樣。2、干擾 GA 狀態列,特別是如果網站流量不是很大(比如我)。3、傳播病毒。

所以,有沒有完美的解決方法呢?實際上,沒有。

要知道,資料一旦錄入到 GA,就沒有辦法刪掉了。能做的只有兩件事,一是阻止垃圾資訊進一步加入到 GA,二是在檢視中過濾掉已經新增進來的垃圾資訊,眼不見為淨。

第一步:使用過濾器阻止未來的垃圾資訊

在語言項中,一般字元數是5-6個,很少有超過10個的,所以我們可以認為語言項超過15個字元的就一定是垃圾資訊。

此外,有一些字元是不可能出現在合法的語言項中,但垃圾資訊會利用這些字元來組成URL,比如: “secret google com”, “secret,google,com”, “secret!google!com”,所以我們也一併排除空格、點號、逗號、驚歎號。

.{15,}|\s[^\s]*\s|\.|,|\!|\/

在admin中選擇Filter,然後新增一個如圖所示的過濾器即可。

640?wx_fmt=png

設定好了之後,可以驗證一下是否會攔截掉我們想攔截的內容:

640?wx_fmt=png

沒有問題,未來的語言項垃圾資訊會直接被攔截掉。

第二步:通過Segment淨化已有資料

過濾器從你開始設定時生效,而歷史資訊無法修改。不過 GA 提供了 custom segment 功能,在生成報告時,選擇性過濾掉一些資料。

Segment 就是資料片段,指的是在完整的資料中取出我們需要的片段進行分析。比如我們可以單獨取出24歲以下的使用者的行為,對比24歲以上的使用者行為有何不同。而這個功能正好可以讓我們把“語言”不規範的資料過濾掉。

如下圖,在All Users的旁邊有一個 + Add Segment 的按鈕,點選之後就可以配置我們的 segment。

一定要注意是選擇“does not match regex”,裡面填上之前的正則。

640?wx_fmt=png

建立好了新的 segment 之後,就會看到過濾之後的全新報告。

640?wx_fmt=png

下次再進入時,又會預設進入到 All Users 檢視,這時可以在 All Users 裡的 custom 裡找到我們的自定義 segment,勾選即可。

如果經常需要檢視這個 segment,推薦點選 shortcut 來新增快捷方式。

640?wx_fmt=png

它會儲存當前的 segment 和排序等,下一次可以直接從 Short 專案進入到這個快捷目錄。

以上就是完整的過濾方法了,這樣應該可以過濾掉大部分語言spam的攻擊。GA提供的 filter 和 segment 的功能很強大,如果後續發現有新的垃圾資訊,可以繼續通過今天學習的方法來更新完善我們的過濾器。

公眾號推薦:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

相關文章