如何使用 PHP 可能且安全地验证 CAPTCHA
How to propably and securly validate CAPTCHA using PHP
我正在使用 Google reCAPTCHA,它运行得非常好。但由于一些问题,我开始使用 php 图片验证码。
验证码图像正确呈现,但我无法正确验证它。
我用这个代码生成验证码
session_start();
if(isset($_SESSION['captcha_text']))
{
unset($_SESSION['captcha_text']);
}
$permitted_chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
// ...
// code to generate CAPTCHA
// ...
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
然后我使用此代码显示验证码
<img src="CAPTCHA/captcha.php" alt="CAPTCHA" class="captcha-image"><i style="position: absolute;" class="refresh-captcha"></i><BR>
<input autocomplete="off" style="margin-top: 0.8rem;" type="text" id="captcha" name="captcha_challenge" pattern="[A-Z]{6}">
现在我使用此代码在另一个 PHP 文件中验证验证码
session_start();
header('Content-Type: text/html; charset=utf-8', true);
if(isset($_POST['captcha_challenge']) && strtoupper($_POST['captcha_challenge']) == $_SESSION['captcha_text']) {
echo '<p>You entered a correct Captcha.</p>';
} else {
echo '<p>You entered an incorrect Captcha.</p>';
}
$_SESSION['captcha_text'] = NULL;
unset($_SESSION['captcha_text']);
exit;
到目前为止,它工作正常。我手动测试它并且它有效。
但是当我使用一些安全脚本来测试表单时,我收到了垃圾邮件。
为什么??我错过了什么??
<--抱歉我的英语不好-->
好的
在互联网上搜索后,我决定返回 Google reCaptcha 并尝试使用 reCaptcha 修复我网站上出现的显示问题。
正如 @Steve 所说
Rather than try to reinvent the wheel, just save yourself the hassle
and use Google reCaptcha.
我正在使用 Google reCAPTCHA,它运行得非常好。但由于一些问题,我开始使用 php 图片验证码。 验证码图像正确呈现,但我无法正确验证它。
我用这个代码生成验证码
session_start();
if(isset($_SESSION['captcha_text']))
{
unset($_SESSION['captcha_text']);
}
$permitted_chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZ';
// ...
// code to generate CAPTCHA
// ...
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
然后我使用此代码显示验证码
<img src="CAPTCHA/captcha.php" alt="CAPTCHA" class="captcha-image"><i style="position: absolute;" class="refresh-captcha"></i><BR>
<input autocomplete="off" style="margin-top: 0.8rem;" type="text" id="captcha" name="captcha_challenge" pattern="[A-Z]{6}">
现在我使用此代码在另一个 PHP 文件中验证验证码
session_start();
header('Content-Type: text/html; charset=utf-8', true);
if(isset($_POST['captcha_challenge']) && strtoupper($_POST['captcha_challenge']) == $_SESSION['captcha_text']) {
echo '<p>You entered a correct Captcha.</p>';
} else {
echo '<p>You entered an incorrect Captcha.</p>';
}
$_SESSION['captcha_text'] = NULL;
unset($_SESSION['captcha_text']);
exit;
到目前为止,它工作正常。我手动测试它并且它有效。 但是当我使用一些安全脚本来测试表单时,我收到了垃圾邮件。 为什么??我错过了什么?? <--抱歉我的英语不好-->
好的 在互联网上搜索后,我决定返回 Google reCaptcha 并尝试使用 reCaptcha 修复我网站上出现的显示问题。 正如 @Steve 所说
Rather than try to reinvent the wheel, just save yourself the hassle and use Google reCaptcha.