处理失败的nonce验证的最佳方法是什么?

时间:2011-04-05 22:15:58

标签: php security validation nonce

我对nonce有一个模糊的理解,但有点混乱。

当nonce验证失败时,正确的响应是什么?

在什么情况下nonce验证会失败?真正的用户有什么风险?

1 个答案:

答案 0 :(得分:4)

表单中的nonce的目标通常是双重的:确保数据仅提交一次,并确保用户实际进行提交。第二点是帮助防止跨站点请求伪造:http://en.wikipedia.org/wiki/Cross-site_request_forgery

处理它们取决于具体情况。如果用户填写表单并且nonce失败,请刷新页面(预填充数据),说一些良性的话,如“哎呀有问题,请检查输入并再次提交”。有效用户可以点击提交,攻击将被阻止,或者用户至少知道发生了什么。

验证可能由于某些原因而失败。如果您启用了某种形式的浏览器缓存,则用户访问一个表单(使用给定的nonce),然后导航到另一个表单(使用它自己的nonce)并通过后退按钮返回第一个表单,nonce可能会失败。通过允许浏览器缓存发生,他们没有刷新页面,并且您的服务器可能只在会话中为它们存储一个有效的nonce,因此它们不匹配。一个有效的用例,一个失败的nonce(不是我失去了睡眠,只要确保重新填充表单)。

总的来说,我的推荐是:告诉用户再次提交,巧妙地暗示他们应该检查他们的输入,以便再次提交。