CAPTCHAの導入方法 -KCAPTCHAの導入-

公開日: : 最終更新日:2014/04/20 CakePHP, IT, PHP


CakePHP(1.2、1.3)にKCAPTCHAを導入してみたのでメモ。

 CAPTCHAとは

CAPTCHAとは、ブログのコメントを書くところなどにある画像に書かれている文字と同じ文字を入力してもらい認証するものです。
詳しくは以下サイトを参照のこと。
CAPTCHA

導入するとして、1から全てを作るのは大変なのでライブラリを使うことにします
ライブラリをまとめてくれたサイトがあるので、そこから選びます。
PHPで使えるCAPTCHA画像作成ライブラリまとめ

今回は、上記サイトで推薦されている「KCAPTCHA」を利用することにします。
※KCAPTCHAは、LGPLライセンスです。

 導入手順

 導入の流れ

1. KCAPTCHAをダウンロード

  • ダウンロードには事前にアカウントが必要なので、ここで作成しておきます。

2. 解凍したら、「/app/vendors/」に設置。

  • 「example.php」は使わないので削除します。

3. 「/app/controllers/components/」に「captcha.php」を設置。

  • captcha.phpの中身は以下のソース。
<?php
class CaptchaComponent extends Object{
  function startup(&$controller){
   $this->controller = $controller;
   }
  function render(){
   App::import('Vendor','kcaptcha/kcaptcha');
   $kcaptcha = new KCAPTCHA();
   $this->controller->Session->write('captcha', $kcaptcha->getKeyString());
  }
}

4. 利用するcontrollerに以下のコードを追加。

  • 赤文字の箇所が追加するところ。

※以下はサンプルとして、UsersControllerとしています。

<?php
class UsersController  extends AppController{
  <span style="color:#FF0000;">var $components = array('Captcha');</span>
  <span style="color:#FF0000;">function captcha(){</span>
   <span style="color:#FF0000;">$this->Captcha->render();</span>
  <span style="color:#FF0000;">}</span>
}

5. 利用するviewに以下のコードを追加。

  • 表示されている文字を入力する箇所も用意します。

※参考サイト1.から乱数を付与。

<img src="<?php echo $html->url('/users/captcha?r='.rand()); ?>"><br/>
<?php echo $form->input('inputWord',array('label'=>'上記画像の文字列を記入してください。'));?><br/>

6. 5のviewから送られてきたデータをチェックする関数を「Captcha.php」に用意。
※あくまでサンプルです。

function validateCaptcha($input){
  $sessionCaptcha =  $this->controller->Session->read('captcha');
  if(empty($sessionCaptcha) || empty($input)){
   return false;
  }
  if($input == $sessionCaptcha){
   unset($sessionCaptcha);
   <del datetime="2010-02-07T10:07:27+09:00">return false;</del>
   return true;
  }
  return false;
}

7. データを受け取る該当コントーラーで以下のようにチェックを追加。

if(!$this->Captcha->validateCaptha($input)){
  //環境に併せて記述する。
  //以下は、viewにエラー文字を表示させる場合です。
  $this->User->invalidate('errorInputWord');
}

 最終構成

最終的な構成は以下のようになっていると思います。

  • /app

    • /vendors

      • /kcaptcha[追加]
    • /controllers

      • xxx_controller.php[記述追加]
      • /components

        • /Captcha.php[追加]
    • /views

      • /xxx.ctp[記述追加]

 参考サイト

※上記ソースコードは、以下の参考サイトに載っているソースコードを参考にしつつ修正しています。

  1. CAPTCHA機能付けました
  2. Integrate CakePHP with Kcaptcha

 おまけ

CakePHP用の日本語対応CAPTCHAコンポーネントもあるようです。
cakephp用CAPTCHAコンポーネント(日本語対応)
こちらはMITライセンスです。

広告

関連記事

no image

Jenkins+Capistranoを設定した時にしたこと -「ポート変更」「公開鍵認証」対応-

* 前段階 上記にあるように、Jenkins+Capistranoの設定をしています。 ただし、設

記事を読む

no image

複数アカウントでgithubを使う

1つの端末で複数のアカウントを使いたくなったので、その方法を整理してみた。 流れとしては以下のとおり

記事を読む

list-normal

jQuery Mobileのリストの見た目をちょっとカスタマイズ -覚書-

jQuery Mobileを使えば簡単にスマートフォン対応できる言えば出来るのですが、少しでもカスタ

記事を読む

iPhoneアプリ開発 -UIScrollViewでタッチを取得-

* やりたいこと UIScrollViewでタッチを取得する。 * 方法 通常のUIScrollV

記事を読む

no image

iPhoneアプリ開発 -スライドアウトするスプラッシュ画像-

* やりたいこと アプリを起動すると表示される画像(スプラッシュ画像)があります。 単に表示されるだ

記事を読む

no image

TwitterAPI 1.1対応で困ったこと −フォロー・フォロワー一覧取得−

  TwitterのAPI1.1に2013年の3月15日までには対応しないといけません。

記事を読む

NEC_0882

Facebookで名刺を作ってみた -Mooの名刺作成サービス-

1ヶ月~半月くらい前に話題になっていたMooの名刺作成サービス。 話題になっていた時期に注文した名

記事を読む

no image

Selenium2.0でUIテスト(2) -Rubyでやってみよう-

前回は、Selenium + PHPを試しました。 今後はRubyでやってみようということでSele

記事を読む

no image

リンク文字をタッチしても色が変わらない --webkit-tap-highlight-colorのメモ-

* 背景 jQuery Mobileを利用してスマートフォン対応をしたサイトにおいてリンク文字をタッ

記事を読む

no image

iPhoneアプリをヒットさせるために大事な5つのこと

巷にはたくさんのiPhoneアプリがたくさんあります。 そして、毎日新しいアプリがリリースされていま

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑