captcha验证表格中的帖子

时间:2015-03-12 16:53:06

标签: php captcha

我只是想知道我应该放多少以便猜测我的$ _POST中验证码是否错误(验证码图像在我的表单中工作正常)所以我的问题是如何在用户输入时输入错误我的验证码图片中有一个错误的验证码?

if ($_POST['captcha'] !== $_POST['real']) {
    $errors[] = 'You're wrong';
}

这是我的验证码

session_start();

function random($length) {
    $chars = "abcdefghijklmnopqrstuvwxyz23456789";
    $str = "";
    $size = strlen($chars);
    for ($i=0;$i<$length;$i++) {
        $str .=$chars [rand (0, $size-1)];
    }

    return $str;
}

$cap = random(7);
$_SESSION['real'] = $cap;

$image = imagecreate(100, 20);
$background = imagecolorallocate ($image, 0,0,0);
$foreground = imagecolorallocate ($image, 255,255,255);

imagestring($image, 5,5,1,$cap,$foreground);
header("Content-type: image/jpeg") ;
imagejpeg ($image);

1 个答案:

答案 0 :(得分:1)

你的形象非常清晰。易于阅读的人类。机器人也很容易阅读。我测试了你的代码并通过一个简单的在线OCR(http://www.i2ocr.com/)放置了图像,它完美地回来了测试。

亲自试试。

我会考虑使用现有的验证码库。比如Google Captcha选项。我喜欢no captcha recaptcha(http://googleonlinesecurity.blogspot.com/2014/12/are-you-robot-introducing-no-captcha.html

---编辑以回答此案。

在验证码处理文件中

session_start();
$errors[]=array();
if ($_POST['captcha'] != $_SESSION['real']) {
    $errors[] = 'Sorry.  Incorrect Response.  Please Try Again';
}

if(count($errors)>0){
//show user the errors
  print_r($errors);  //You should make this pretty
//probably go back to the login form
echo'<a href="loginform.php">Go Back and Try Again</a>';
//stop processing
exit();
)

//if we got here then the posted captcha matche the 'real' session variable.

echo'Yay!  You got it right!';