防止双重提交

Kry*_*ski 6 html forms double-submit-prevention

完全重复:如何处理服务器端的多个提交

手头的一般任务:防止在基于多用户Web的应用程序中提交双表单.想想金融交易.

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

  1. JavaScript禁用按钮
    • 缺点:如果禁用JavaScript,则无效
  2. 后端验证 - 看看这个类型的最后一个请求多久来自这个用户,如果不是很久以前就发出错误
    • 缺点:如果两个提交的内容足够接近,则每个提交可能无法识别另一个

我正在寻找主题专家来贡献他们的最佳实践以及深奥的技巧.可以是任何语言和框架,但Django特别感兴趣.网上已经写了很多关于手头任务的内容,但最好有这里展示的最佳实践.

Jam*_*ies 8

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

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

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