防止双重提交

时间:2009-05-19 00:26:01

标签: html forms double-submit-prevention

  

完全重复How to handle multiple submissions server-side

手头的一般任务:阻止在基于多用户网络的应用程序中提交双重表单。想想金融交易。

我有两种方法可以串联使用:

  1. 禁用按钮的JavaScript
    • 缺点:如果禁用JavaScript,则无效
  2. 后端验证 - 请查看此类用户的最后一次请求多久以前来自此用户,如果不是很久以前发出错误
    • 缺点:如果两个提交的内容足够接近,则可能无法了解其他提交
  3. 我正在寻找主题专家来贡献他们的最佳实践以及深奥的技巧。可以是任何语言和框架,但Django特别感兴趣。关于手头的任务已经在网上写了很多,但是最好有这里显示的最佳实践。

1 个答案:

答案 0 :(得分:8)

常见的解决方案是每次生成表单时在服务器上生成令牌。将令牌存储在服务器上,将其作为隐藏字段添加到表单中,并在获得带有该令牌的表单提交后将其删除。

如果您在没有有效令牌的情况下提交表单,则表示该表单已提交并忽略。

这具有为项目添加XSRF保护的附加优势。