我需要阻止为客户的网站提交重复的表单。
(PRG模式:http://en.wikipedia.org/wiki/Post/Redirect/Get)
我最初尝试使用PRG模式 在这种情况下,我认为我需要跨多个Web服务器处理会话(或spring flashmap)。
我的一位同事提出了这种方法。
另一位同事提出了这种方法。
我认为方法2,3不是一个好的选择 但我不知道这些方法的具体缺点或安全风险 我试图谷歌,但我没有找到答案。
提前谢谢。
我想更新优缺点。
session
,database
或其他内容。session
并且拥有多个服务器,则必须执行某些操作以使会话可在多个服务器上使用。 答案 0 :(得分:3)
方法1是一种非常直接的方法,可以解决一些重复的帖子问题。它无法应对服务器延迟,这是重复提交的原因。
方法2只不过是错误的。如果限制浏览器标准功能(如刷新),用户将会感到不安。也就是说,如果你甚至能够通过技术上跨浏览器这样做。您需要考虑F5,Ctrl + F5,⌘+ F5等各种刷新图标。
我必须承认,我并不完全理解方法3的意图,但是,将用户反弹到空白页面感觉有点不对。
另一种标准方法是使用带表单帖子的nounce。这也可以帮助您避免称为Cross Site Request Forgery的安全风险。这很简单。
如果您收到另一个非现有nonce的请求,那么您知道它是重复的帖子或更邪恶的CSRF攻击。
您可能会找到some support library为您执行此操作。