我有一个自定义表格,并希望通过要求访问者输入给定的随机数进行验证,以通过人工检查来确保表格提交的安全性。
下面是生成随机数的函数:
function random_number() {
$rand1 = rand(10, 100);
$rand2 = rand(10, 100);
$randnum = $rand1 * $rand2;
return $randnum;
}
下面是验证表人工检查:
<label for="humanCheck">
<?php echo random_number(); ?>
</label>
<input id="humanCheck" type="number" name="message_human" placeholder="Enter above number">
下面是验证码,用于检查访问者是否输入了给定的随机数:
$randomnumbercheck = echo random_number();
if (!$human == 0) {
if ($human != $randomnumbercheck) {
response("error", $not_human); //not human!
} else {
/// form submission
}
问题是random_number()
函数在验证表单和验证代码中生成的随机数是不同的,并且始终是错误的验证。
答案 0 :(得分:1)
使用输入上下文中给出的数字进行身份验证不是一个好方法!
仅使用确认号码进行安全认证就不是那么简单!您必须在服务器端进行确认。但是在此示例中,用户可以一次又一次地重新发送和重新发送相同的数据,并且将确认该数据!为了防止这种情况,您必须创建一个表并在其中插入记录。通过这种方式,它只是您想要的代码:
<?php
function random_number() {
$rand1 = rand(10, 100);
$rand2 = rand(10, 100);
$randnum = $rand1 * $rand2;
return $randnum;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$randomnumbercheck =$_POST['hidden'];
$human=$_POST['message_human'];
if ($human !== $randomnumbercheck) {
echo "error";
} else {
echo "Correct! <br/>";
}
}else{echo "no post";}
$generatednumber=random_number();
?>
<label for="humanCheck">
<?=$generatednumber;?>
</label>
<form action="" method="POST">
<input id="humanCheck" type="input" name="message_human" placeholder="Enter above number"/>
<input type="hidden" name="hidden" value="<?=$generatednumber;?>"/>
</form>