authkittenプラグインで子猫認証 (CakePHP Advent Calendar 2010 18日目)


BakerがCakePHPのために.bashrcに設定すべき5行 (CakePHP Advent Calendar 2010 17日目) @ php-tipsからバトンをいただきました。

今回は私が作ったものの、あまり人気のないauthkittenプラグインについて紹介したいと思います。
authkittenプラグインとは、「子猫認証」を提供するプラグインです。
「子猫認証」とは、特定の画像の中から子猫を選ぶ事で認証を通す仕組みで、
SPAM判定に使います。
私のブログにも設置してあるのですが、設置してからのSPAM投稿はゼロになりました。
(一方で普通のコメントも減ったような気もしますが)
ロジック自体は非常に単純なので、対策すれば認証突破も簡単ですが、今のところSPAM業者の対策コストの方が大きいようです。

それでは早速インストールしてみましょう。まずcakephpをインストールします。
私はcakephpを追いかけるのをやめて自作のフレームワークを使うようになってしまったので
1.3系は追いかけていません。ですのでcakephpのバージョンは1.2.9にします。


$ wget 'https://github.com/cakephp/cakephp/tarball/1.2.9' --no-check-certificate
$ tar -xvf ./1.2.9

適当に展開したら、webrootを外に出してtmpをwritableにしたりしましょう。このあたりはbakerの方々には自明なので省略します。
tmpをwritableにしてsaltを設定してdbを適当に設定したらpluginsディレクトリにauthkittenを配置します。


$ cd cakephp-cakephp-4fa2dd7/app/plugins
$ git clone git://github.com/ha1t/php-cake-authkitten.git authkitten

これでインストール完了です。
実際に使ってみましょう。

まず、controller,model,viewを以下のような感じで作ります。

app/controllers/posts_controller.php

class PostsController extends AppController
{
    public $uses = 'Page';
    public $helpers = array(
        'Authkitten.AuthKitten',
    );

    public function index()
    {
        if ($this->data) {
            $this->Page->set($this->data);
            if ($this->Page->validates()) {
                echo 'OKです!';
                exit;
            } else {
                echo 'ねこじゃないのが選択されてるか3つ選んでないです!';
                exit;
            }
        }
    }
}

app/models/page.php

class Page extends AppModel
{
    public $name = 'Page';
    public $actsAs = array('Authkitten.AddValidationRule');

    // @url http://okwave.jp/qa/q4523891.html
    public $useTable = false;
    public $_schema = array('id' => array('type' => 'integer'));

    public $validate = array(
        'source' => array(
            'rule1' => array(
                'rule' => array('authKitten'),
                'required' => true,
                'message' => 'ぬこが正しく選択されていません',
            ),
        ),
    );
}

app/views/posts/index.ctp

<h3>AuthKittenのテスト</h3>

<?php echo $form->create(null, array('url' => '/posts/index')); ?>
<?php echo $form->input('source', array('type' => 'textarea', 'rows' => 5)); ?>

ぬこの画像を3つ選んでください :<br />
<?php $authKitten->display(); ?>

<?php echo $form->submit('post', array('div' => false)); ?>
<?php echo $form->end(); ?>

で、posts/indexにアクセスすると以下のような画面がでてくるので猫を選んでみてください。

authkitten

うちのブログはコメントに子猫認証を使い、トラックバックはトラックバック元に自分のサイトのURLが存在するかどうかを確認するようにしたらSPAMゼロになりました。もう4年くらいSPAMゼロ。
みなさんもおためしあれ。

さて、次はなんとid:kunitじゃないですか。
kunitさんを知らないという人はMaple再起動で振り返る国内PHPフレームワーク戦争の歴史 – /halt/Snapshotが参考になるでしょう。

投稿者: halt

PHPプログラマ。

コメントを残す

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

ねこ認証:9つのパネルの中からねこを3匹選んでください