先日からGoogle Analyticsの計測値を歪めるリファラースパムの問題に悩んでいます。そのリファラースパムをGoogle Analyticsの機能を使い、一括で除外する方法を見つけましたので、以下でご紹介します。
2018年9月1日現在、リファラースパムと思われるドメインは以下の4つです。
- auto-seo-service.org
- auto-seo-service.com
- autoseo-service.org
- autoseoservice.org
これら4つのドメインについて興味本位でアクセスしないようにしましょう。攻撃者の意図は「何だこの参照元は?」と思って、調べさせることにあります。
イタチごっこのドメインには正規表現で対応
当初は”auto-seo-service.org”だけであったリファラースパムも、日を追うごとに”auto-seo-service.com”、”autoseo-service.org”、”autoseoservice.org” と微妙に違うドメインで、仕掛けてくるようになってきました。
Google Analyticsにはフィルタ機能があり、計測値の対象としたくないドメインを決め打ちで除外することができます。ただ攻撃者はその機能を知ってか知らずか、決め打ちの裏を書くようなドメインで攻撃を仕掛けてきます。今回の例でも”auto “、 “seo “、”service”、 “org”、”com”、”-(ハイフン)” といった文字列をベースとして、セコい入れ替えをしてます。
上記の4つのドメインについてフィルタをかけたとしても、例えば以下のようなドメインでリファラースパムをされてしまうと、またもや手動でフィルターをかけなければいけません。まさしくイタチごっこです。
auto-seoservice.org autoseoservice.net
そこで活用する機能がGoogle Analyticsが用意している正規表現(regex)機能です。攻撃者のドメインについて、一定の規則性を見出しその規則性に沿ったすべてのドメインをリファラースパムとして除外します。
auto seo serviceをフィルタする正規表現
ここ数日の傾向から判断して、Google Analyticsのフィルタにかけるための正規表現は2つあります。2つとしたのはフィルタしたい範囲を狭くするか広くするか、その人の考え方によって変わるからです。
フィルタの範囲を狭くする場合
auto-?seo-?service.(.+)*
フィルタの範囲を狭くする場合の書き方です。スパム攻撃者は参照元が”auto seo service”の文字列の間の文字は、”-“を使うか、もしくは文字は何も使わないことを想定しています。
もし”auto_seo_service.com”から参照された場合は、フィルタがかかりません。”auto_seo_service.com”は、「真面目な」参照元であるという考え方に基づいています。正規表現の詳しい内容については、順を追って説明します。
auto-?seo
?(クエスチョンマーク)は直前の文字が0回または1回出現するかどうか調べるときに使います。今回のリファラースパムでは”-(ハイフン)”が1回使われるケースとそうでないケースが見られましたので、”auto-?seo”としました。
seo-?service
“auto-?seo”と同じです。なお、”service”のあとに続く”.(ドット)”はリテラル(メタ文字ではない文字。普通の文字列)と解釈されますので”\(バックスラッシュ)”は必要ありません。
(.+)*
“(.+)*”の具体例をあげると、”com”、”org”、”info”、”jp”などが挙げられるでしょう。”.+”を囲う”()(丸かっこ)”は正規表現の箇所を明示的にするために使用しています。また”.+”のうち”.”は任意の1文字を表し、”+”で引き続き任意の1文字があるか確認します。その作業を最後の”*(アスタリスク)”で、任意の1文字を繰り返す作業を行います。
フィルタの範囲を広くする場合
auto(.?)*seo(.?)*service.(.+)*
フィルタの範囲を広くする場合の書き方です。スパム攻撃者は参照元が”auto seo service”の文字列の間の文字は、”-“を含めたすべての文字を1つ以上使うか、もしくは文字は何も使わないことを想定しています。
もし”auto_seo_service.com”から参照された場合でも、フィルタがかかります。”auto seo service”の文字列を使う参照元はあらゆる文字を使って攻撃を仕掛けてくるであろうという考え方に基づいています。
auto(.?)*seo
“(.?)*”は丸かっこで中の文字列について、正規表現を使っていることを明示しています。”.?”で直前の1文字が0回または1回あるかを確認します。この場合、”auto_seo_service.com”だけでなく、”auto__seo__service.com”でもフィルタがかかります。
seo(.?)*service
“auto(.?)*seo”と同じです。
Google Analyticsのフィルタリングに保存
保存方法は先日、当ブログで書いた記事が参考になりますが、スクリーンショットで表すとこんな感じになります。