ページ

2005年6月28日火曜日

スパムコメント対策に CAPTCHA を導入

先週末からかなりの数 (1日に400~500くらい) のスパムコメントが書き込まれてます。ただ、ストアドプロシージャを書き換えて、スパムっぽいものは非表示になるようにしてありますから、そのほとんどは表示されていません。表示されちゃったものもストアドをちょっと書き換えれば対処できています。けど、さすがにうっとうしいです。なので、CAPTCHA を導入することにしました。


CAPTCHA っていうのは、機械での読み取りがし難いように加工した画像に書かれている文字を入力してもらうことによって 「相手が機械ではなく人間であること」 を確認しようっていうものです。最近はいろいろなところで使われていますし、ググるとちゃんとした解説もたんさんでてきます。
コメント書き込みに CAPTCHA を使うようにすれば、機械的に POST することによって書き込みを行なっているスパムコメントは防ぐことができるでしょう。けど、普通にコメントを書き込もうって人の手間を増やすことになります。それに、たとえば目が不自由で読み上げソフトを使って Web を閲覧しているような方にとっては、画像に書かれた文字を入力するような CAPTCHA はかなり困った存在になると思います (Hotmail の登録時なんかは、画像だけではなく音声による CAPTCHA も用意してありますね)。


.NET で使える CAPTCHA もいろいろあるとは思いますが、今回は
Clearscreen CAPTCHA Control v1.4 Released with Community Server 1.0 support [UPDATED]
を使わせて頂きました。
このコントロールは、.Text と Community Server 1.0 に対応していますので、とても簡単に導入することができます。ただ、残念ながら画像のみで音声による CAPTCHA などといった機能はありません。


Readme.txt にも書いてありますが .Text への導入は以下の 2点だけで、リビルドも必要ありませんでした。



  1. Clearscreen.SharpHIP.dll を .Text の bin フォルダにコピーする。

  2. .Text のスキン用コントロール (Skins\スキン名\Controls フォルダ) の PostComment.ascx を書き換える。
    まず、
    <%@ Register TagPrefix="cc1" Namespace="Clearscreen.SharpHIP" Assembly="Clearscreen.SharpHIP" %>
    という 1行を追加。これは場所はどこでもいいと思うけど、私は 2行目 (<%@ Control ... %> のすぐ下) に書いています。
    次に、CAPTCHA を表示したい場所に、
    <cc1:HIPControl id="HIPControl1" runat="server" ControlMessage="この絵に表示されている文字列を入力してください (半角で4文字です)" RandomCodeLength="false" CodeLength="4" TextPattern="Percent90" BackgroundPattern="Percent40" FontSize="15" JavascriptURLDetection="false" />
    を追加。

これだけです。
また、上記のように cc1:HIPControl の方はいろいろとパラメータを指定できます。



  • ControlMessage … 画像の横に表示するメッセージ。デフォルトだと "Enter the code you see"。

  • RandamCodeLength … コードの文字数をランダムに決める。デフォルトは true。

  • CodeLength … コードの文字数。(デフォルトは RandamCodeLength が true なのでなし)

  • TextPattern … 画像のテキスト部分の HatchStyle。指定できる値は HatchStyle 列挙体 参照。デフォルトは Weave。

  • BackgroundPattern … 画像の背景部分の HatchStyle。指定できる値は HatchStyle 列挙体 参照。デフォルトは Wave。

  • FontSize … 画像のフォントのサイズ。デフォルトは 15。

  • ImageWidth … 画像の幅。

  • ImageHeight … 画像の高さ。

  • JavascriptURLDetection … 画像の src 属性をクライアントサイドの JavaScript によって指定するか。デフォルトは true。実は、true にしていると URL に #Feedback のように # が含まれているとバグります。対処方法は作者さんの blog の コメント にあります (このコメントにあるように cc1:HIPControl タグの後ろに src 属性を修正するクライアントサイドの JavaScript を埋め込む)。false にしておけば特に対処は必要ありません。

  • TrustAuthenticatedUsers … ログインしているユーザの場合は CAPTCHA を表示しません。デフォルトは true。

ほかにもありますが、とりあえずこんなところで。
(PersistDotTextComments という魅力的なプロパティがあるんだけど、残念ながら実装されていないみたい)

4 件のコメント:

  1. CAPTCHA を導入した状態でコメントがちゃんと書き込めるかのテストです。

    このコントロールは CAPTCHA が入力されていないとせっかく書いたコメントであってもきれいに消された状態にされてしまいます。注意してください。

    返信削除
  2. こちらも、スパムが多くて困っています。


    こちらのサイトを発見して、是非取らしてみたいのですが、

    費用的なことなどはひつようでしょうか?

    返信削除
  3. 他人にもいろいろ作っているので、

    スパム対策はいつもアタマがいたいです。

    [POST]ボタンがたくさん出現して、1つだけ正しい……なんていう認証は難しいのでしょうか。

    返信削除
  4. micenx gotten zikerim i agree with you 他人にもいろいろ作っているので、

    スパム対策はいつもアタマがいたいです。

    返信削除