« 点検に出すと壊れる?! | メイン | ひさしぶりの洗車♪でもちょっぴり不調 »
コメントスパム対策....になるかどーか
2004年08月20日
mt-comments.cgiにHTTP_REFERERのチェックを入れるようにしました。 コメントスパム(スパムコメント)のことがよく話題になっているのですが、私のところにはぜんぜん来ないのです。
だから、中身がどんなモノなのか?想像がつきません。

ただ、「コメントスパムを投げるのは簡単なことだなぁ~」と思ってはいます。
だって、本当に簡単なんです。
#何もチェックされていないようなので....。

たとえばデスクトップ上(場所はどこでもいいです)に、これみたいなHTML(URLやエントリーIDは適宜変えてくださいね)を置いて、ブラウザで開いて投稿してみると....
あら不思議、投稿できちゃいます。
MovableType上では、Submitした文字コードすら変換されずにそのまま登録されるので、たとえばUTF-8で運用されているblogに、シフトJISで投稿しちゃったら、化け化けしちゃいます。

#文字化けのことはおいておいて....

ここで何が気になったかというと、
「あっ、MovableTypeのコメント投稿ってREFERERのチェックしてないんだ!」
っということでした。

よくいわれているコメントスパムは、REFERERも偽ってくるのでしょうか?
そこのところがよくわからないのですが、とりあえずチェックを入れておくことにしました。

mt-comments.cgiのはじめのほうに下記のような感じでいれておきました。
これで、上記のやりかたでは投稿できなくなります。
    if (!($ENV{'HTTP_REFERER'} =~ /$ENV{'HTTP_HOST'}/) ) {
        print "Content-Type: text/html\n\n";
        print "<html><head><title>JBad Referer</title></head>\n";
		print "<body><center><h1>ERROR: Bad Referer</h1></center></body></html>\n";
        exit;
    }
    ※間違ったREFERER(MTを置いているのと異なるホスト)からのアクセスの場合はエラー画面を表示します。
でも、コメントスパムに効き目があるかどうかは、実際にきてみないとわからないです。
いろいろな対処方法があるようですので、来たら、そのときまた考えてみたいです。

#...なぁんて悠長なことは言っていられないくらいアタックされるのでしょうか?

たぶん、こんな簡単なことでは防げないのでしょうね。

ただ、
「REFERERについてのチェックについては、どのように認識されているのかな?」
っということについては気になるのググってみました。

"コメントスパム REFERER"で検索をかけたら、mt::MRU 【コメントスパン対策情報】Refererをチェックがヒットしました。

Refererには特殊な文字列が入ってくるようです。これなら、↑の対策で大丈夫そうです。
でもきっとこんなことって「イタチゴッコ」だと思うので、ぜったいに不十分だとは思うのですが。
またこれから、いろいろと考えてみたいと思います。

投稿者 megu : 2004年08月20日 00:43

コメント

 ども引用ありがとございます。

 もうほんとイタチゴッコって感じですよねー。ただ、最初からドドーンと対策するのも大変だし、そこまでやる必要があるかどうかわからないので、何かあるたびにちょっとずつ修正しているって感じでしょうか。
 いろいろとハウツーがウェブで見つかりますが、拙ブログはバージョンアップとか移行するときのことを考えて、mtのcgiに手を加えるよりも、なるべくサーバ側で設定するようにしています。

追伸 リビルド中でTBのTimeOutしたみたいです。いちおー、ちゃんとついてたので重複ぶん削除しました^^

投稿者 yukkie : 2004年08月20日 08:28

yukkieさん、こんにちは。
コメントありがとうございます。
#TBの件ではご迷惑をおかけしてすみません!
なるほど!
cgiそのものに手を入れてしまうと、バージョンアップの際にまた同じ場所を修正しなくてはならなくなりますものね。
私もいろいろ考えてみたいと思います。
考えてみるだけで答えはでないかもしれないけれど(苦笑)
これからもよろしくお願いいたします。

投稿者 megu [TypeKey Profile Page] : 2004年08月20日 18:31

安易なReferer CheckはNorton Internet Securityに代表されるセキュリティソフトウェアと共存できません。

これらのソフトウェアではユーザのプライバシー保護やクロスサイトスクリプティング対策を目的として、HTTP_REFERERをダミー文字列で潰してしまうのです。

投稿者 (o) [TypeKey Profile Page] : 2004年08月22日 06:28

ogawaさん、いつもどうもありがとうございます。
スパムが偽ってくるのが心配というよりも逆パターンがあったのですね。(正しい人がアクセスできない)
MTでRefererチェックが入っていないのは、あえてそういったことを考慮してなのでしょうか?
(Matt Wrighのスクリプトには当然のように組み込まれていましたが...)
Apacheのログをみたところ未設定は多々ありますがダミー文字列らしきものは(見逃しているのかもしれませんが)今のところみかけないので皆さんアンチウィルスソフトは使っていらっしゃるでしょうけれど、セキュリティの設定を強くしていないのかもしれません。
もしかしたら...万一POSTしたくても出来ない方がでてきてしまうのですね?でも、スパムはいやだ...うーん、難しい。
ただ、この環境を提供しているのはサーバ側なわけで、そのルールに乗っ取らない答え方をしようとしているのは、そのソフトのせいなわけで、それを許可するかどうかも、こちら側に権利があるわけで...(まわりくどい言い方。。。)
っというわけで、ただ、入力されたコメントが無駄になってしまわないように、こういった対策をする場合はコメント投稿欄になにかひとこと添えておくのがいいかもですね。

投稿者 megu [TypeKey Profile Page] : 2004年08月22日 13:07

Nortonは変数名も変えてしまうはずですのでApacheのログ上は未設定に見えるのではないかと思います。

さて仰る通り、「ポストしたくてもできない」ということが起きます。個人で運営する掲示板用のフリーCGIならともかく、プロダクションレベルのソフトウェアでHTTP_REFERERが正しくセットされていることを要求するものはほとんどないのではないかなと思います。

Matt Wrightのスクリプトは読んだことがないので分かりませんが、一時Refer(r)er Checkが流行ったのは事実です。しかし、HTTP_REFERERは(Nortonがrewriteできるのと同様に)容易に偽装できるという性質もあります(多分そういうSpam-aided Toolsもあるでしょう)。したがってチェックしても無駄かもしれません。

むしろ、FORMのhidden fieldでsession keyを渡してそれをチェックする方法が一般性もあり安全かなと思います。

投稿者 (o) [TypeKey Profile Page] : 2004年08月22日 15:54

セキュリティソフトの設定ですがやはりデフォルトで使っていらっしゃる方が多いのでしょうか。
パブリックなサイトを運営していらっしゃると、いろいろ調べることが多くて大変そうですね。
ここは本当に本当にありがたいことに、ogawaさんをはじめ、お客様がきてくださってとてもうれしいのです。
昨日はコメント入力欄にリンクをつけたけれど「やはり変なチェック入れないほうがいいのかな?」っとちょっと反省気味です。

偽装できることはわかっているので、駄目元なんです。
#いちばん安易な方法ですよね。
まだスパムをいただいていないのでわからないです。
これから先もこんな僻地ですので、スパムさえ来てもらえないかもしれないけれど...。
Formのhidden項で...というのはいろいろなサイトで拝見しました。
この先、なにかあったならそんな方法も考えたいと思います。

投稿者 megu [TypeKey Profile Page] : 2004年08月23日 12:56

コメントしてください




保存しますか?