1

フォームを使用して captchia コードを統合しようとしています。私が持っているのは、キャプチャ部分を独自のphpページで機能させることができた基本的な形式です。また、フォームを独自のphpページに表示することもできました。私が抱えている問題は、両方の部分を連携させる方法がわからないことです。

これは私が持っているものの断片です:

<?php
session_start();
    if (isset($_POST['captcha'])) {
        $_SESSION['captcha'] = rand(0, 99999999999);
        } else {
            if ($_SESSION['captcha']!==$_POST['captcha']) {
            echo 're-enter a new captcha!';
            $_SESSION['captcha'] = rand(0, 99999999999);
        }
    }
?>

    <form action="formx.php" method="POST">
            <ul>
                <li>
                    Username:<br>
                    <input type"text" name="username">
                </li>
                <li>
                    Password:<br>
                    <input type="password" name="password">
                </li>
                <li>
                    Password again:<br>
                    <input type="password" name="password2">
                </li>
                <li>
                    Email:<br>
                    <input type="text" name="email">
                </li>
                <li>
                    <input type="submit" name="captcha" value="submit">
                </li>
            </ul>
    </form> 
4

3 に答える 3

0

ざっと見てみると、おそらく次のいくつかのステップを見逃しているでしょう。

if ($_SERVER['REQUEST_METHOD']!='POST')  //If initial load, load up captcha into session
    $_SESSION['captcha'] = rand(0,9999999999);
else{//Means form was submitted
    if (isset($_POST['captcha'])) {//Check if they entered
        if ($_SESSION['captcha']!==$_POST['captcha']) {//check if ! correct, reissue new captcha
            echo 're-enter a new captcha!';
            $_SESSION['captcha'] = rand(0, 99999999999);
        }else{
            //Everything was good, handle data
        }
    }else{//Nothing was entered, give them new captcha
        echo 'please enter the captcha!';
        $_SESSION['captcha'] = rand(0, 99999999999);
    }

}

ここで、これをユーザーに表示するときに注意が必要です。あなたが置く場合:

<li>
    Please type <?=$_SESSION['captcha']?>:<br/>
    <input type="submit" name="captcha" value="submit">
</li>

ボットはこれを回避できます。したがって、この問題を克服する方法を理解する必要があります。単純に番号を表示して入力するように指示するだけで、非常に基本的なボットを阻止できます。難読化 ( <span>1</span><span>2</span>) すると少し難しくなるかもしれませんが、それでもボットはそれを解析してバイパスすることができます。Javascript 変数として保存してからチェックすることもできますが、ボットが十分に賢い場合はバイパスできます。iframe が機能する場合、画像が機能する場合、ユーザー エージェントの解析が役立つ場合などがあります。これらはすべて機能しますが、どのように実装するか、どの程度安全にするかはあなた次第です。

個人的には、私は Recaptcha のファンですが、通常は実装が非常に簡単で、コーディングは最小限で済みます。また、GD および TrueType ライブラリを使用してキャプチャ イメージを作成しますが、これには、Recaptcha を使用できる場合の価値よりもはるかに多くのプログラミングが必要です。最後に、ページの読み込み後に読み込まれる Javascript の数学の問題が好きです。これらのボットは、読み込みと何が起こっているのかを理解するのに苦労します。

結局のところ、やりたいことは何でもしてください。行き詰まった場合は、コードを投稿してください。私たちがお手伝いします。

于 2012-12-19T04:55:31.887 に答える
0

新しいページを送信するには、以前のキャプチャを確認する必要があります..その古い値をセッションの古い変数に $_SESSION['oldCaptcha'].. として割り当ててください..コードは次のようになります。

session_start();
if (isset($_POST['captcha'])) {
    if($_SESSION['oldCaptcha'] == $_POST['captcha']) {
        echo 'Captcha is Successfully Matched';
    }
    else {
        $_SESSION['oldCaptcha'] = rand(0, 99999999999);   
    }         
}

答えがelseループ内にある場合は、フォームで$_SESSION['oldCaptcha']を使用して、ユーザーが入力できるように表示します...

于 2012-12-19T05:00:01.600 に答える
0

これを試して

if($_SERVER['REQUEST_METHOD']=="POST"){
    if ($_POST['capt']  == $_SESSION['captcha'] ){
        echo "Sucsess";
        $capt= rand(0, 99999999999);  
        $_SESSION['captcha'] =$capt;
    }else{
        echo "Fail";
    }
}else{
     $capt='';  
     $capt= rand(0, 99999999999);  
     $_SESSION['captcha'] =$capt;
}    

?>

    <form action="" method="post">
            <ul>
                <li>
                    Username:<br>
                    <input type="text" name="username">
                </li>
                <li>
                    Password:<br>
                    <input type="password" name="password">
                </li>
                <li>
                    Password again:<br>
                    <input type="password" name="password2">
                </li>
                <li>
                    Email:<br>
                    <input type="text" name="email">
                </li>
                <li>
                    Captcha:<br>
                    <input type="text" name="capt" >
                    <?php echo "Captcha : " .$capt ; ?> 
                </li>
                <li>
                    <input type="submit" name="captcha" value="submit">
                </li>
            </ul>
    </form> 
于 2012-12-19T05:13:06.583 に答える