スパム対策ロードマップ
2008年3月16日
スパム対策ロードマップを少し変更することを考えている。
Googleで『CAPTCHA』というキーで検索した場合に上位に出てくる記事に以下のものが有る。
CAPTCHAは愚策
CAPTCHAが人間に一手間とらせるのが嫌いと考えるのは私も同じで、だからこのサイトではProtectByMD5を採用している(JavaScriptを利用)のだが、この方法は上記サイトで提案している方法の一つである。ただ、心配されているとおり、ブラウザの機能をそのままスパムロボットが持ってしまった場合(実際には、これはそれほど難しくない)、そういったロボットにはJavaScriptの難しい計算は何の問題にもならなくなる。
で、最終的にはCAPTCHAを使用するというのがロードマップであったのだが、最近はあちらこちらでCAPTCHA破りが続いているようだ。
NucleusのNP_Captchaは、比較的強度が高いと思われる。以前、NucleusJP フォーラムで、CAPTCHAを破ってロボットによる新規登録の後にスパムコメントが書き込まれることが多かったが、新規登録時のCAPTCHAをNP_Captchaのものに置き換えると、パタッとスパムコメントが無くなった。
NucleusJP フォーラムで用いられているのはphpBBだから、上記の結果はphpBBのCAPTCHA破りのためのスクリプトがNP_Captchaにはまったく通用しないということを示しているに過ぎない。なので、このことだけでNP_Captchaの強度が高いことの証明にはならない。が、NP_Captchaを破られたという報告を聞いたことが無いので、実際に強度は高いのではないかと思っている。
私自身、仕事でIMAQ Visionを用いてイメージ解析を行ったことが有る。その経験から、その気になればCAPTCHAを破るスクリプトを作るのにそれほど苦労が無いことは知っている。今まではスパマーの能力が低かったから破られなかっただけのことで、今後はそういうわけではなくなるような気がする。そうなると、NP_Captchaの強度がいくら高いとはいえ、それが破られるのも時間の問題だし、強度をさらに高くするなどの処置をしても、結局はいたちごっこになるだろう。
そうなると、先のリンク先で述べられている次の方法も考えてみたい。
4.クライアント側の処理をサーバよりも高コストにする
実は、この記事を読む前から考えていたことがあって、この4の方法と同じものである。
NP_ProtectByMD5では、クライアント側でMD5値を計算するためのJavaScriptを用意してある。クライアント側の処理を高コストにするには、サーバからクライアントに知らせる値として、hash値のみを提供すればよい。クライアント側では、ブルートフォース方式で元の文字列を計算するJavaScriptを実行させる。元の文字列の長さを適当に調整すれば、平均10-20秒ほどで答えが出るようにすることができるはず。計算は、コメント書き込み欄でキーストロークがあったときに開始するようにすれば、ブログを閲覧するだけのユーザには負担はかからない。
このプラグインはそれほど難しくないはずなので、暇をみて作ってみようと思う。
Googleで『CAPTCHA』というキーで検索した場合に上位に出てくる記事に以下のものが有る。
CAPTCHAは愚策
CAPTCHAが人間に一手間とらせるのが嫌いと考えるのは私も同じで、だからこのサイトではProtectByMD5を採用している(JavaScriptを利用)のだが、この方法は上記サイトで提案している方法の一つである。ただ、心配されているとおり、ブラウザの機能をそのままスパムロボットが持ってしまった場合(実際には、これはそれほど難しくない)、そういったロボットにはJavaScriptの難しい計算は何の問題にもならなくなる。
で、最終的にはCAPTCHAを使用するというのがロードマップであったのだが、最近はあちらこちらでCAPTCHA破りが続いているようだ。
NucleusのNP_Captchaは、比較的強度が高いと思われる。以前、NucleusJP フォーラムで、CAPTCHAを破ってロボットによる新規登録の後にスパムコメントが書き込まれることが多かったが、新規登録時のCAPTCHAをNP_Captchaのものに置き換えると、パタッとスパムコメントが無くなった。
NucleusJP フォーラムで用いられているのはphpBBだから、上記の結果はphpBBのCAPTCHA破りのためのスクリプトがNP_Captchaにはまったく通用しないということを示しているに過ぎない。なので、このことだけでNP_Captchaの強度が高いことの証明にはならない。が、NP_Captchaを破られたという報告を聞いたことが無いので、実際に強度は高いのではないかと思っている。
私自身、仕事でIMAQ Visionを用いてイメージ解析を行ったことが有る。その経験から、その気になればCAPTCHAを破るスクリプトを作るのにそれほど苦労が無いことは知っている。今まではスパマーの能力が低かったから破られなかっただけのことで、今後はそういうわけではなくなるような気がする。そうなると、NP_Captchaの強度がいくら高いとはいえ、それが破られるのも時間の問題だし、強度をさらに高くするなどの処置をしても、結局はいたちごっこになるだろう。
そうなると、先のリンク先で述べられている次の方法も考えてみたい。
4.クライアント側の処理をサーバよりも高コストにする
実は、この記事を読む前から考えていたことがあって、この4の方法と同じものである。
NP_ProtectByMD5では、クライアント側でMD5値を計算するためのJavaScriptを用意してある。クライアント側の処理を高コストにするには、サーバからクライアントに知らせる値として、hash値のみを提供すればよい。クライアント側では、ブルートフォース方式で元の文字列を計算するJavaScriptを実行させる。元の文字列の長さを適当に調整すれば、平均10-20秒ほどで答えが出るようにすることができるはず。計算は、コメント書き込み欄でキーストロークがあったときに開始するようにすれば、ブログを閲覧するだけのユーザには負担はかからない。
このプラグインはそれほど難しくないはずなので、暇をみて作ってみようと思う。
コメント
Kat (2015年6月11日 15:42:20)
最近、時々スパムコメントを受け付けるようになった。jp_ProtectByMD5をすり抜けている。テスト用にこのプラグインを改変し、MD5値の計算は、onsubmitイベント時に行なうようにしてみた。これでもすり抜けるようなら、もう少し考える必要がある。
Katsumi (2015年6月13日 14:50:15)
スパムは、onsubmitイベントも実行しているらしい。もう少し考えてみる。
Katsumi (2015年6月16日 10:51:00)
とりあえず、現在のスパムねらい打ちで排除するスクリプトを、導入した。今回の物は、手動入力ではなく、ロボットのようだ。
そろそろ、Javascriptベースの対策だけでは、駄目かもしれない。ロボットの側でJavascriptを実行している可能性が高い。
そろそろ、Javascriptベースの対策だけでは、駄目かもしれない。ロボットの側でJavascriptを実行している可能性が高い。
Kat (2015年6月16日 15:26:51)
上記対策、ちゃんと出来ていなかったので、改めて対策コードを書いた。コメントテスト。