17 August '2005 - 23:02 | Pivot Referrer Spam 退治
次のバージョンが出るまでは放っておこうと思っていた Referrer Spam 対策だけれど、最近、開発者メイリングリストでも話題になった。 なんかいい方法ないかね。と言っていたら、Pivot-Blacklist で勇名な TheMarco が、こんな方法ならどうかと言って Hardened referers という extension を実装した。かなりいい。
実はそのまま使うと日本語は文字化けするので、フォーラムに書かれている(というかおれが書いたんだけれど)ような対策を入れてあげないといけないのだけれど、どうやらそれでうまく動いているっぽい。「納豆」で検索してここを見つける人がいるというのがなんとも嬉しい。
仕組みはけっこう複雑。簡略化した説明は以下の通り。
1. index.php に <script type="text/javascript" src="getkey.php"> と書く。
2. ブラウザなら getkey.php にアクセスするし、馬鹿なスクリプトならしない。
3. getkey.php は、現在時刻を含むファイル名でファイルを作成。
4. index.php に document.write('<img src="refgetter.php?key=' + そのファイル名 + '&referer=' + document.referrer + '/>'); と書く。
5. ブラウザなら refgetter.php にアクセスするし、馬鹿なスクリプトならしない。
6. refgetter.php は、HTTP_REFERRER が index.php のドメインじゃなかったら、画像を返すだけで、それ以外は何もしない。
7. refgetter.php は、与えられたファイル名のファイルが今さっき作られたばかりだったら、hgetref.php を include_once する。
8. hgetref.php は、直接アクセスされたら「ばーか」と言って終了。つまり、php コードとして include されないといけない。
9. hgetref.php は、$_GET['referer'] を保存する。
抜け道はあるのかも知れないけれど、とりあえず、今のところは完璧に Referrer Spam を排除できてる。嬉しい。
なお、Bob も気に入っているようだし、テストが終わってまとまったら、今の get_referrer の代わりとして正式に採用すると言っているので、使い方を英語で読むのが面倒な人はそれまで待つべし。
というわけで、ありがとう、マルコ。
僕はずっとリファラスパムに負け負けだったのですが、これで勝ち組に入れるかも。
あと、StickyMemo 使わせて頂いています。ありがとうございます。
davilin () (ウェブサイト) - 18 August '2005 - 05:31
で、すごいなあと感心しながらも、どうやってヤツらがもぐりこめたのかを調査してみたら、なんと、古い archive から来てました。つまり、entry.php と archive.php を修正して Rebuild the Frontpage(s) しただけじゃダメで、ちゃんと Rebuild All Files しておかないと穴は残ったままですよ、と。さっきちゃんと rebuild したのでもう大丈夫のはず。
StickyMemo には十分満足してるんで、これ以上いじる予定はまったくないんですけれど、何かあったら自身でハックするなり、私に文句を言うなり、いつでもご遠慮なくどうぞ
ひろしま () - 18 August '2005 - 15:30