ホーム > タグ > スパム対策

スパム対策

コメントを承認式にしました&そのうち引っ越すかも

このブログは開設以来、承認なしでコメントを表示してましたが、最近botによるものと思われる、1日数件のスパムが投稿され、削除するのが面倒になってきたので、承認つきにしました。個人的には、コメントは承認なしで即時表示されるほうが好きなんだけどね・・・。

botよけのCaptchaやその他の手法を取り入れようとも思ったんですが、レンタルブログではそのあたりもままならず。近いうちにレンタルサーバに引っ越ししたいとこですが、管理の面はさておき、そこそこビューも増えて、SBMでもちょこちょこブックマークされたりしてるので、URLが変わっちゃうのが辛いところ。

FC2ブログでは.htaccessはいじれないので(たぶん)、meta要素のrefreshでリダイレクトするかな。GoogleやYahoo!なんかは、待ち時間0のrefreshはHTTPステータスコード301と同じように見なしてくれるらしいからいいけど、SBMはどうなるんだろう。

URL変わらないとしたら、引っ越し前のサイトがいつまで残るかわからんから将来的に不安だし、変わるとしたら、リダイレクトの解決先が適切でない場合(全部トップページにリダイレクトとかよく見る)に何をブックマークしてたか全然わからなくなる可能性もあって、それはそれで問題あるような気もする。

まあ、それ以前に大昔からやってるWebサイトに分身が2個あって、リダイレクトもなんにもやってないのをまずなんとかしなきゃな。モチベーションあがらないけど。

下記の記事をもっと早い段階で読めていれば、と今さらながら思う。

とはいえ、日進月歩の技術と倫理と、牛歩な自分の知識では、常に正しい行動を選ぶのは難しいところ。であれば、誤りに気づいたときには、傷が浅いうちに、軌道修正するのが肝要ですかね。

あ、そういえば、このブログのタイトルもだいぶ前から変えたい。SEO的にはだめだめだな。

CakePHPでreCAPTCHAによる画像認証を実装するまで

GWからCakePHPでつくりはじめたWebサービスで、画像認証を実装したいと思って、以前から気になっていたreCAPTCHAを導入した。びっくりするくらい簡単だったけど、意外とreCAPTCHA実装の記事が少ないので、丁寧に解説します。

reCAPTCHAってなんだって人はこちらをどうぞ。

なお、CakePHPは1.2を使ってます。

1. まずは登録

reCAPTCHAを使うにはWebサイトでアカウントを作る必要があります。

まずはhttp://recaptcha.net/へアクセスし、「USE reCAPTCHA ON YOUR SITE」へ。

recaptcha001.png

「Sign up Now!」へ。

recaptcha002.png

「Sign up」へ。

recaptcha002_2.png

ユーザー名、パスワード、パスワード再入力、連絡先メールアドレス、そしてもちろんreCAPTCHAによる画像認証を入力して「Sign up Now!」へ。

recaptcha003.png

次に、どのドメインでreCAPTCHAを使うかを聞いてきます。たぶんここで入れたドメイン以外からの検証リクエストは受け付けないんでしょう(少なくともlocalhostからは受付けてましたが)。

親ドメインを入れとけばサブドメインでも使えるし、一つのアカウントで複数のドメインを登録できるし、大量のドメインから使うんだったら「Enable this key on all domains (global keys)」にチェックを入れとけば、ドメインの制限は受けないようです。

入力したら「Create Key」へ。

recaptcha004.png

これで登録完了です!

recaptcha005.png

「Public Key」(公開鍵)「Private Key」(秘密鍵)は実装のさいに使用します。「Public Key」(公開鍵)は別に誰に知られてもまったく問題ないですが、「Private Key」(秘密鍵)は絶対に知られないようにしましょう(でないと認証の意味ないです)。

なお、ここで表示される情報はメニューの「MY ACCOUNT」からいつでも確認できます。

2. PHP用のライブラリを用意する

メニューの「RESOURCES」に「PHP」の項目があるので、そこへ。

recaptcha006.png

Download」へ。

recaptcha007.png

Google Codeに飛ぶのでこのzipをダウンロードします。

recaptcha008.png

zipを展開するといくつかファイルが出てきます。

この中の「recaptchalib.php」をCakePHPの/app/vendors下に置いておきます。

3. View側の実装

View側では<form></form>の中に入るように、以下のコードを書きます。

App::import('Vendor', 'recaptchalib'); $publickey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; echo recaptcha_get_html($publickey);

1行目はさきほどコピーしたライブラリの読み込み。

2行目はreCAPTCHAのPublic Key (公開鍵)を書きます。

3行目はreCAPTCHAのウィジェットを表示します。

たったこれだけでOK!

4. Controller側の実装

Controller側では先ほどのViewのformから呼ばれるアクション内に以下のコードを書きます。

App::import('Vendor', 'recaptchalib'); $privatekey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $resp = recaptcha_check_answer( $privatekey, $_SERVER["REMOTE_ADDR"], $this->params['form']['recaptcha_challenge_field'], $this->params['form']['recaptcha_response_field']);

1行目はやはりライブラリの読み込み。

2行目はreCAPTCHAのPrivate Key (秘密鍵)を書きます。

3行目はユーザーが入力した文字列を検証します。

これで$resp->is_validに検証結果が入るので、あとはお好きなように。

悪意とWeb2.0。

ここ数ヶ月、このブログのコメントにスパムがよく入る。

記事に関連性のある広告なら目くじらたてるほどの事ではないと思うが、全く関連性のない(しかも品のない)広告となると、怒るのを通り越してあきれてしまう。

いわゆるWeb2.0の世界は、不特定多数の善意によって成り立つ。ブログなら書き手の許可なくコメントやトラックバックを入れれるし、Wikiでも記事の追加・編集・削除までできる。

こうしたシステムは悪用しようと思えば、いくらでも悪用できる。広告書き込みはいくらでもできるし、誹謗中傷、ねつ造も簡単だ。

Web2.0以前の常識では、こうしたシステムがうまくいくとは思えなかった。私にとって初めてのWeb2.0的サービスのWikipediaを見た時には、かなり驚いたものだ。

現在そうしたサービスでは、少数の悪意に対し、多数の善意によって一定のクオリティを保っているわけだが、このバランスはサービスによって異なるし、刻々と変化する。一度、悪意が優位となれば、サービスが崩壊することもありうる。

ネット上のサービスに限らず、善意で成立する社会において、悪意の存在はあらゆる点で自由を制限する。たとえば、建物のセキュリティを強化することで、善意の人間に不要な面倒をかけさせ、行動を制限し、コストの一部を負担させてしまう。世界中の国の軍事費が不要になれば、どれだけ豊かになるか考えてみてもいい。

まあ、現実的には善意の者が受ける制限と、悪意の者から受ける被害とのバランスをとってシステムを構築するしかないのだろうが、顔も見えない不躾な人たちのせいでこんな苦労をせねばならないというのは、どうも釈然としないところがある。

スパム業者はこんなことどうでもいいんだろうが、全くどうにかならんものか。

ホーム > タグ > スパム対策

検索
フィード
メタ情報

ページの上部に戻る