将用户输入的验证码值与会话中存储的期望值进行比较

|| 我正在尝试将一种简单的验证码实现为要构建的形式,但是遇到了我自己似乎无法解决的问题。 我正在使用简单的代码来生成一个像这样的随机数。
$randomnr = rand(1000, 9999);
$_SESSION[\'randomnr2\'] = md5($randomnr);
....然后再添加一些代码,以生成随机数的图像并将其显示在页面上。我反对这样的有效性....
if (strlen($captcha) !== ($_SESSION[\'randomnr2\'])) { 
    $error[\'captcha\'] = \"CAPTCHA error. Please try again\";
}
我该如何对照会话“ 2”中存储的随机数来检查已输入到验证码输入字段中的值?     
已邀请:
我不确定为什么要对照此处的字符串的md5哈希值检查字符串的长度,但是假设
$captcha
是来自用户的数字,则可以执行以下操作:
if(md5($captcha) !== $_SESSION[\'randomnr2\']) {
  $error[\'captcha\'] = \"CAPTCHA error. Please try again\";
}
    
PHP将自动将所有内容转换为
strlen()
的字符串(如果可以),因此
echo strlen(42); 
echo strlen(\'42\');
即使第一个是整数,也会输出\'2 \'。要将提交的值与商店的值进行比较,它很简单
if ($_SESSION[\'randomnr2\'] === (int)$captcha) {
   ... it matched ...
}
您将需要再次将提交的值转换为int,因为PHP $ _GET / POST数组中的任何内容在内部都被视为字符串。     
<div id=\'captcha_to_show\' style=\'border:1px solid silver;\'>gobldeygook</div>
<input name=\'captcha\' id=\'captcha\'>
... 通过scriptmonkey附加...
$(\'document\').ready(function(){
  $(\'#captcha\').val($(\'#captcha_to_show\').html());
});
查看开源的验证码脚本。您的实现将需要以某种方式在页面上发送该验证码,以便可以通过拖动页面的方式看到该验证码的值,并且该人员/机器人/任何人都可以相应地填写验证字段,因此您实际上拥有零保护。这就是为什么验证码要么使用难以通过脚本读取的难以理解的卷积图像,要么使用比机器人更能使人在上下文中理解的语义问题,例如[\'你会说一和三的总和是什么?\' === 4]。是的,具有某种设置的字体,间距和大小的更简单的图像验证码可以通过某种像素模式字典攻击来破解。     

要回复问题请先登录注册