4

我对随机数有一个模糊的理解,但有点困惑。

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

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

4

1 回答 1

4

带有表单的随机数的目标通常有两个:确保数据只提交一次,并确保用户实际提交。第二点有助于防御跨站请求伪造:http ://en.wikipedia.org/wiki/Cross-site_request_forgery

处理它们取决于上下文。如果用户正在填写表单并且 nonce 失败,请刷新页面(预先填写数据),说一些良性的话,例如“糟糕,出现问题,请检查您的输入并再次提交”。一个有效的用户可以点击提交,攻击将被阻止,或者用户至少知道发生了什么。

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

总的来说,我的建议是:告诉用户再次提交,巧妙地暗示他们应该检查他们的输入,让再次提交变得容易。

于 2011-04-05T22:29:19.243 回答