スパム : してログ

Google Analytics の言語レポートに、下記のリファラスパムらしきアクセスが記録されていたので、調べてみました。通常この部分は「ja」とか言語コードしか来ないのですが、ここに興味を惹くような文を入れて不正サイトへアクセスさせようとするのが目的です。

Secret.?oogle.com You are invited! Enter only with this ticket URL. Copy it. Vote for Trump!

「?」になっている部分は U+0262 の「G」に見える文字コードが入っています。従って、注意していないと一見 Google の URL に見えるサイトに誘導されることになります。

巧妙にターゲットを絞った攻撃か

この攻撃のターゲットは、Google Analytics を導入していて、ある程度アクセス数のあるサイトの管理者、ということになり非常に巧妙な手法です。うちみたいな少ないアクセス数のサイトにも来ているのは謎ですが、企業とかのシステム管理者が引っかかったら、システムの深いところまで侵入される糸口になるかも知れません。これなら、何の権限もない一般人を初めから除外できるので都合が良いのでしょう。

見つけたフォームに片っ端からコメントスパムを投稿していくロボットへの対策ですが、単純な対策でかなり効果がありました。この手のスパムコメントは、ほとんど英文のやつで放っておくとすぐに、もの凄い数に上ってしまいます。

ロボットは、見つけたフォーム要素の種類(type="text" など)と名前(name="email" など)を頼りに書き込みを行います。そこで、ダミーの入力欄を設けてロボットを騙してやればロボットかどうか判定できると考えました。最初は、名前を日本語ローマ字(name="namae" とか)にしてみましたが、これは効果がありません。最終的に、非表示のフォーム要素を使う方法が、大いに効果ありました。

<input type="text" name="name" style="display:none;" />

このように、ブラウザに表示されないダミーのテキスト入力欄を設けます。このフォームの受け取り側では、この要素が空の場合のみ正しい処理をするようにします。たったこれだけですが、今のところロボットはうまく騙されてくれているようです。

昨日取り付けたばかりのコメントシステムだが、最初のコメントは案の定、スパムコメントでした。しかも何と早いことか。昨日の今日で、バ○アグラがなんたらとか言う英語のスパムが書き込まれてしまいました。検索エンジンのスパイダーと違って、UA 偽装してたりするだろうから、本当に迷惑な話だと思います。

こういったスパム対策はユーザーの利便性を損ねないと完全に解決することができないだけに、いつも悩む点であり、ウェブで何かを運営する際に萎えてしまう点でもあります。この先、画像認証を導入するのか、承認制を導入するのか、ロボット判定を頑張るのか、何れにしても楽しくない作業が待っています。

よく使われる画像認証は、本来と無関係な作業をユーザーに強いてしまう、障害を持った人を排除してしまう(聴覚を使った認証もあるが)、などあまり好きな解決方法ではないです。画像認証以外の人間らしさの判定も幾つかあげてみます。

  • あり得ない速度での投稿(フォームの提供から投稿ボタンを押されるまでの時間が余りにも短いとき)
  • ページ内の画像などが要求されていない(フォーム狙いでクロールされているなら画像は要求しないだろう→見えない画像タグに投稿トリガーを仕込んでおく)
  • JavaScript でキーイベントを見る(フォームに実際入力されたか判断できそう)
  • JavaScript で確認ダイアログを入れる
  • submit ボタンをやめて、通常ボタンと JavaScript で投稿させる

まあ、上にあげたようなことは、昔あるプロジェクトで散々やりましたが、結局どれも突破されてしまうんですよね。画像認証にしても OCR と組み合わせて突破するプログラムもあるし、JavaScript で色々工夫しても実際のブラウザを自動運転するようなやつが相手だと意味が無いです。