忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 10:26 |
PHP1-20:Pear::Text_CAPTCHA_Numeralのようなもの
前回の続き。
CAPTCHAによる画像認証は、既に破られています。
今時デジカメで表情判別が出来るくらいですから、文字の解読も比較的容易なのです。
判別されないよう画像を歪めすぎると、今度は人間にすら読めなくなりますし。


というわけで単純に表示するだけではなく別のロジックを導入してみましょう。
例えばPearにはText_CAPTCHA_Numeralというパッケージがあります。
これは「21+32」みたいな文字列を作成し、その答えを入力させることで認証させるというものですが、……そんなん自力で作ったほうが早いですから!


<?php    
    #初期設定
    session_start();
   
    #表示文字列を決定
    $phrase[0]=rand(10,99);
    $phrase[1]='+';
    $phrase[2]=rand(10,99);
   
    $_SESSION['phrase']=$phrase[0]+$phrase[2];
    $phrase=$phrase[0].$phrase[1].$phrase[2];
   
    var_dump($_SESSION,$phrase);


たったこれだけのものをPear化ってそれ需要あるんかい。

せっかくなので前回のText_CAPTCHAに同じことをさせてみましょう。

captcha.php

<?php    
    #初期設定
    session_start();
    require_once('./captcha.class.php');
    $captcha = new pearCaptchaModel();    
    
    #表示文字列を設定
    $phrase[0]=rand(10,99);
    $phrase[1]='+';
    $phrase[2]=rand(10,99);
   
    $_SESSION['phrase']=$phrase[0]+$phrase[2];
    $phrase=$phrase[0].$phrase[1].$phrase[2];
   
    #オプション変更
    $captcha->setOptions(array('phrase'=>$phrase));
   
    #画像作成
    $cap['image']=$captcha->makeImage();
    $cap['phrase']=$captcha->getPhrase();
    $cap['filename']=$captcha->getImageFile();

    #表示
    print('<img src="'.$cap['filename'].'">');
    print("<pre>");var_dump($cap,$_SESSION);die();


見てのとおり、$options['phrase']に表示させたい値を突っ込んだだけです。
表示は「35+84」のような文字列となり、$_SESSION['phrase']の値は119みたいな数値となります。
Text_CAPTCHA_Numeralとか入れるよりよっぽど簡単ではないでしょうか。
PR


2008/08/26 14:17 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-21:KittenAuthを実装してみる | HOME | PHP1-19:CAPTCHA認証>>
忍者ブログ[PR]