目前,我在PHP中使用nonce作为安全解决方案存在问题。
我看了这篇关于How to check if a request if coming from the same server or different server?的文章
关于使用隐藏的输入表单字段散列随机值,同时将该随机值存储到与用户对应的会话中。提交表单时,检查隐藏字段的值是否与存储在会话中的字段相同。(我想我对此有问题)
示例
<?
$_SESSION['formhash'] = md5('any value to be hashed');
?>
<input type="hidden" name="hashed" id="hashed" value="<?php echo $_SESSION['formhash']; ?>" />拥有Mozilla并检查元素的用户仍然会找到我的隐藏字段,然后复制它。然后创建他/她自己的表单,然后将其发布到我的url,登录仍然会被绕过。
图像显示示例

有什么更安全的方法吗?如有任何帮助,将不胜感激!
发布于 2014-04-11 05:05:15
底线是,您不能阻止用户在提交表单之前操作表单数据。您的解决方案是确认表单数据来自您发送给它的用户。
无论用户是否“登录”,每次新访问者访问您的站点时,您都可能会启动会话。这意味着每次发送表单时都可以存储散列值,理论上,您应该能够将返回表单数据上的哈希值与会话中的哈希值关联起来(就像代码所做的那样)。
有了这些知识,我们可以考虑以下情况:
场景3是我们所知道的CSRF攻击,您的解决方案是对此攻击的标准防御。
如@cHao所述,您应该为生成的每个表单重新生成散列。
https://stackoverflow.com/questions/23003563
复制相似问题