2009年06月20日
PukiWiki のコメント・スパム退治への覚え書き | (日常非日常) |
PukiWiki で掲示板(BBS)を作るには #article というプラグインを使うが、この各投稿には最後(または最初)に #comment というプラグイン呼び出しが挿入される。
このcommentミニフォームを使って一行コメントを投稿出来るようになるわけだが、最近このフォームを使ったスパム投稿が頻発しだした。中身は cialis やviagra、valiumなどの所謂オンライン薬局へのリンク広告である。
少し前までは、2、3回この種のスパム投稿をやり過ごせば去って行ってくれたのだが、昨日はしつこくて何度やり過ごしても止まらず、一時的に閉鎖(#articleや#commentを削除)したのだが、再開するとすぐにまた投稿が始まりイタチゴッコが終わらない(-_-;)
そこで仕方ないので重い腰をあげて、認証付きの投稿フォームを探してみた。
幸い、この種のプラグインは複数の人が開発していてすぐに設置することが出来た。
詳しくは→自作プラグイン/pcomment_kcaptcha.inc.php
上記は #comment に対する前処理として実装されているが、#article に対してはこちらの方が改造されているのがあった。
これで大丈夫、、、、と思ったのだが・・・甘かった(-_-;)
スパマーはすでにこの上を行っており、上記の二つのプラグインと汎用CAPTCHAライブラリ「KCAPTCHA」を設置して、#article を #article_kcaptcha に、#comment を #comment_kcaptcha に書き換えてもスパムは止まらないのだ。
まさか画像解析して自動投稿するツールが存在するのか?と思ったが、まさかねぇ。だとすると手動で??
まさかねぇ、投稿頻度からみてもそれはあり得ないだろう。
一応念のため、一部を改造して、画像の文字だけでなく、プラスして特定の文字も入力しなければ通らないようにしてみた。
ところが・・・それでも止まらないのだ(-_-;)
なんなのだ???
・・・そこで考えてみた。そしてハタと思いついたので・・・続きはまたあとで(^^ゞ
まずわかって来たことは、スパマーはページ上のフォームに書き込んで送信しているわけではないという事だ。どうやら、直接 cgi を叩いているらしい。
しかも、ページを解析して cgi へのコマンドを組み立てるのではなく、PukiWiki など著名なシステムのプラグインの場合は、元のコードから cgi コマンドパターンをあらかじめテンプレート化して持っていて、それを元に url だけをページから得ているのだろう。
つまり認証を掛けても、スパマーは認証をチェックするプラグインではなく、元々のプラグイン・・・今の場合であれば comment_kcaptcha ではなく、comment を直接呼び出しているのだ。
そこで対策としては、
1.呼び出し元が自ページ以外であればリジェクトする。
2.comment プラグインをやめる。
のどちらかが簡単かな、と思う。ただ、comment プラグインをざっと見た感じでは、自ページ以外からの呼び出しをリジェクトするよな機能はなさそうだし、考えて追加するのも面倒(w
と言うわけで、とりあえず comment プラグインを止めて、別のものにすることを考えてみた。
と言っても探すのも面倒なので・・・名前だけ変えてしまえば?という安易な方法を試してみる。
投稿者 shoda T. : 2009年06月20日 13:52
トラックバック
このエントリーのトラックバックURL:
http://shoda.tk/MT/mt-tb.cgi/691
コメント
貴重な分析ありがとうございます。私も同様のSPAMにどうしてページ更新ができるのか不思議だったのです。
現在#comment_kcaptchaを##comment_kcaptchaに変更したところ内容は変更されないのに、更新時刻だけ変わっているのです。
commentプラグインのソースファイルをリネームして対応してみます。
ありがとうございました。
投稿者 竹本 浩 : 2010年03月23日 12:16
お役に立てれば良いのですが・・・
で、一昨日昨日としつこくやって来たスパマー・・・新規の記事を投稿すると言うやつで、さすがにこれには困りました。
とりあえず、同じ名前ばかりなので、その名前のページを作り(中身は空:w)リードオンリーに設定してしのいでますが・・・さて、もし次から次と別の名前で新規作成してきたら面倒だなぁ。
投稿者 shoda T. : 2010年03月23日 21:44
コメントしてください
名前とメールアドレスは必須です。メールアドレスはブログ上には表示されません。私に届くだけです。 TypeKey ID のサイン・インも必須ではありません。持ってる方だけサイン・インすればいいです。