ネットやベンチャー、経済に関わることについてコメントするblogです。admin「あなた、人間ですか?」(スパム格闘記)あちこちのブログ等でリンクしていただいておりますと、多くの人に読みに来ていただけてありがたい反面、スパムコメントやトラックバックをバラ撒くプログラム(bot)にも多数お越しいただくことになります。我がサーバのアクセスログを見ると、1秒に1件のペースで数百以上のこうしたスパムが書き込まれるのが常態となっておりまして、先日メールサーバがこけてご迷惑おかけしたのも、こうしたスパムを処理するためにサーバのキャパシティがパンクしたから、という次第であります。先日とりあえずサーバーのキャパシティを上げることで対処しましたが、これは本質的な解決方法ではないので、週末来、スパムを効率的に処理する方法は無いものかなあと、あちこちのサイトを参考にさせていただいておりました。「スパムかどうか」を判定するということは、「書き込みをするのが人間なのかプログラム(bot)なのか」を判別することとほぼ等しいと言えます。「スパムをいかに排除するか。区別がつかない人工知能が存在できないという理由は無いと思われますので、究極的に見れば、書き込みの方法や結果だけから機械か人間かを区別することはいつかは不可能になるはずですし、スパマーとブログ運営者の知恵比べも長期的には「いたちごっこ」なのは明らかなのではあります。現在の技術の下で、経済的にペイする方法でどうか、という前提条件をつけて考えてみると、この知恵比べは結構、楽しいですね。今回採用した方法で、今まで1日に何千と来ていたスパムは、(少なくともこの48時間ほどの実績として)、なんと「ゼロ」になりました。前述のとおり、我がサーバは24時間常にスパマーの巡回や書き込みにさらされていたので、サーバのモニターをすると、常にデータベースが「ゴウンゴウン」と音を立てて回っている感じで、CPUの稼働率もかなり高かったんですが、ここ2日ほどは、稼働率のモニターの画面は、ゼロに近い状況。鉄道の高架下で暮らしてきたのが、南の無人島で一人海面に映る月の光を眺めているような気分であります。(これだと、サーバの増設も必要なかったかも。)———————ということで以下、技術的な話になりますが、ご参考までに、採用した方法や参考にさせていただいたサイトをご案内させていただきます。(方法をご披露する、ということ自体、スパマーは個別にこうした日本語の文章を読んでまで個別のサーバごとの対応はしてこないだろうということを前提としておりますが・・・もちろん、これが永遠に続くとは限りません。)スパマーに情報収集をさせないスパムを書き込むにあたっては、ホームページなどで「情報収集」を行い、「トラックバックURL等の抽出」を行い、「書き込み」をするはずです。書き込みされた後でスパムかどうかを判定する方法は、ベイジアンフィルター、ブラックリストなど、いろいろありますが、そもそも前述のように、サーバのキャパシティをほとんど奪われてしまうほどスパムが書き込まれる状況では、書き込まれてからさらに判定のスクリプトを回すというのでは、ますますサーバ資源を食ってしまうわけでして。した問題意識にズバリ答えていただいているのが、このページ。スパマーにCGI叩かれたら負けかなと思っている。http://junnama.alfasado.net/online/2007/07/post_111.htmlこの野田さんのサイトを参考に、下記の対応をいたした次第です。実は、MovableTypeの標準のテンプレートには、<$MTEntryTrackbackData$>というタグが埋め込まれていて、生成されるhtmlやRSS、ATOMなどに(わざわざプログラムでも認識しやすいように)、トラックバックのURLを示す情報を埋め込んでくれてはるわけです。これによって、人間の方も、「トラックバックの自動検知」でトラックバックしやすくなるわけですが、スパマーもURLを収集しやすくなるわけですから、人間のみなさまには、若干手間ですがURLをコピペしていただくとして、今回、このタグを全部削除させていただきました。(新しい名前)*.*という行を追加するとともに、標準のトラックバック・スクリプトである「mt-tb.cgi」とコメント・スクリプトの「mt-comments.cgi」をリネーム(名称変更)しました。ログを見ると、スパマーはURLを収集するなんて面倒なことはせずに、「mt-tb.cgi/エントリーナンバー」という形で決めうちでpingを飛ばしまくっているのではないかという気もします。found)のエラーになってしまっている履歴が、毎秒ズラズラズラーっと並んでます。いい気味だ!)「耳なし芳一」のように、全身に般若心経を書いてもらって「怨霊」からこちらが見えなくなったような気分であります。「怨霊」は未だまだ周りを大勢ゾロゾロ徘徊してますので、「お経の書き忘れ」がないかどうか不安。今のところ新しいURLにはアタックされてないですが。.htaccessを変更wwwサーバへのアクセスを制限するファイル「.htaccess」に、以下の記述を追加して、リネームしたスクリプトをGETコマンドで取得することを禁止しました。(forbidden)のエラーが出ます。前述のとおり、スパマーが巡回してGETコマンドで情報収集しているかどうかは不明であります。上記のうち、トラックバック・スクリプトのリネームの効果は絶大だったんですが、コメント・スクリプトはリネームしても、スパムの書き込みにはあまり効果がなかった。(やや減った感はあるものの。)ということで、効果のあるスパムコメントの対処法はないかとあちこち探し回りました。MT4では、「CAPTCHAプロバイダ」が標準でついていますし、外部のCaptchaプロバイダも利用できます。「コンピュータと人間を区別する完全に自動化された公開チューリングテスト」のことであります。こんな文字列を入れるやつをご存知かと思います。これにしようかと決めかけていのですが、検索してみると、この方式はすでに10月ごろに破られているそうで。addresses.それだけではなく、人間のみなさまにも読みにくい字を読んでいただいたり入力したりする手間を強いるし、前述のとおり、この処理のためにサーバ資源を食うというのでは本質的な解決になりません。いうことで、captchaはやめて、別の方法を探していたときに出会ったのが、あんちもん2さんが作成された「SbCode」というプラグイン。?/>)として追加コメント投稿時に、上記ハッシュからフォーム表示日時を割り出し、現在日時(投稿時)との間隔が指定期間内ならばOKというシンプルなもの。(ソースコードを全部読みこなして理解したわけではありませんが)、Captchaのように人間に文字列を入力する手間をおかけすることもないですし、(重そうな)画像処理プログラムを動かすこともない、というところが気に入りました。「ハッシュ化の仕組みは独自仕様」「ソースは閲覧できる(Perlなので)」とのことですので、理論的には強度の問題も考えられますが、私のブログにスパムコメントを書き込むために、この独自仕様のスクリプトを解析しようというスパマーもいらっしゃらないかと。今のところ、おかげさまでスパムコメント、ゼロであります。ありがとうございます。>参考にさせていただいたサイトのみなさま。)Tweet[PR]メールマガジン週刊isologue(毎週月曜日発行840円/月):「note」でのお申し込みはこちらから。時々拝見しております「まるちゃんの情報セキュリティ気まぐれ日記」ですが、とても興味深かったので引用させていただきます。こんにちは、丸山満彦です。人間とまったく区別がつかない人工知能が存在できないという理由は無いと思われますので、究極的に見れば、書き込みの方法や結果だけから機械か人間かを区別することはいつかは不可能になるはずですしこれ論理的にちょっとおかしいですよね。人工知能が存在できないという理由は無い=判別がいつかは不可能になるはずっていうのはちょっと飛躍しすぎかなと思います。人工知能研究者の端くれとしてはこういうちょっとした部分に敏感に反応してしまいます。人間と機械の打ち込むデータのパターンとしての明らかな違いはもちろん存在しますし、だけれどもそれが「何」であるかが明白でなく、もっと言うと、人間の本質とは何かが明らかでなく、一体人間とはなんなのか、意思とは何なのか、などを日々考えている身からするとそう簡単に言い切って欲しくはありません。人工知能の実現は可能であるかもしれないし、可能でないかもしれません。それは大変な考察と努力の上に成り立っているものなので、「どうせ人工知能もいつかはできるんだろうけど」などと軽々しく言って欲しくはありません。科学なんてそんなもんですから。:yappaさん、コメントありがとうございます。お返事が長くなったので、別エントリをたててみました。http://www.tez.com/blog/archives/001059.htmlよろしくお願いいたします。