我正在用PHP编写一个网站。我有一个简单的登记表。
<form>
<label...></label> <input .../>
</form>
我想添加一个确认字段:
<input type='hidden' name='hiddeninput' value="jn3kjnv3kjvn35">
但是这个代码在服务器端看起来怎么样?每当加载注册表时,我是否需要将每个隐藏值保存到数据库中?
我正在努力确保表格没有被机器人填写。
这就是为什么我需要一个随机的隐藏值,它对于每个表单提交都是唯一的。
假设每次我生成注册页面时,我都会生成"隐藏"字段的唯一值。
当用户提交表单时,我如何将提交的值与生成的值进行比较(就像生成后一样,它不会存储在网站的任何地方)。
Basicly,您应该使用一个生成随机字符串的函数(例如hash
)和CCD_ 2来"记住"这个字符串。提交表单后,您将检查INPUT的值,并将其与SESSION的值进行交叉。
例如:
Form.php
<?php
$hash = md5(time());
$_SESSION['form_xx'] = $hash; //in case you have more than one form.
?>
<form method='post' action='do.php'>
..
..
<input type='hidden' name='secret_key' value='<?=$hash?>'>
</form>
do.php
if($_POST['secret_key'] == $_SESSION['form_xx']) //Just make sure your making the posted value SAFE
//He's ok.
else
die("arggg...those hackers");
您还需要为字段添加一个名称。它的工作原理与其他任何HTML字段类似。
我现在使用Ruby on Rails
框架来开箱即用地解决它。