表单提交中的哈希变量更改

时间:2018-09-26 18:47:10

标签: php forms session spam-prevention

我一直在使用的一种防止表单滥用的技术是添加一个隐藏字段,该字段包含在服务器上设置的哈希变量。通过AJAX将表单提交到PHP脚本后,它将检查POST值与SESSION值生成的值。

在所有页面开头的包含文件中,我必须生成哈希值

$hashed_password = crypt($_SERVER['REMOTE_ADDR'],session_id());
$_SESSION['hashed_password'] = $hashed_password;

该表单是通过AJAX发送的,其中有代码;

    if ($_SESSION['hashed_password'] !== $_POST['thisname']) {
    // do stuff like show a message, record to a log, etc
    die();
}

注意:此名称是表单上隐藏字段的名称。

这在99.9%的时间内效果很好。但是,有时它们不匹配。也不是垃圾邮件发送者,老顾客。似乎主要在Chrome上。

我不知道这怎么可能。在提交表单和提交表单之间更改了他们的IP地址?

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

移动客户端经常更改其IP地址。

http协议是无状态的。不能保证任何两个请求都相互关联。

另一方面,您可以轻松地从单个IP接收完全不相关的请求。

答案 1 :(得分:0)

用户可能在多个选项卡中打开了您的应用程序。如果您在会话中始终只有一个哈希,则很可能会使用先前有效的哈希提交该哈希,而该哈希与会话中的当前哈希不匹配。我通过在会话上保留一系列生成的哈希值来处理此问题,每个哈希值都有一个时间戳,并在一段时间后使它们过期。