将CAPTCHA与表单集成

时间:2012-12-19 04:30:55

标签: php captcha

我正在尝试使用表单集成captchia代码。我有一个基本格式,我可以让captcha部分在自己的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> 

3 个答案:

答案 0 :(得分: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数学问题,这些机器人在加载和查明正在发生的事情时会有更难的时间。

毕竟说完了,做你想做的事。如果您遇到困难,请发布您的代码,我们可以帮助您。

答案 1 :(得分: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);   
    }         
}

如果您的答案是insde else循环,则在表单中使用 $ _ SESSION ['oldCaptcha'] 显示以供用户输入...

答案 2 :(得分: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>