gpt4 book ai didi

java - 为什么是 PRG 模式而不是其他模式?

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:33 25 4
gpt4 key购买 nike

我需要防止为客户的网站重复提交表单。

  • 我们需要来自用户的一些表单数据用于订单确认页面。
  • 我们对网络服务器使用负载平衡。

方法 1:发布/重定向/获取

(PRG 模式:http://en.wikipedia.org/wiki/Post/Redirect/Get) Post/Redirect/Get

我一开始尝试使用PRG模式。
在这种情况下,我认为我需要跨多个 Web 服务器处理 session (或 spring flashmap)。

方法 2:禁用客户端刷新。

Disable refresh on client

我的一位同事建议采用这种方法。

方法 3:发布/发布

Post/Post

另一位同事建议采用这种方法。

我认为方法 2、3 不是一个好的选择。
我不知道这些方法的具体缺点或安全风险
我尝试用谷歌搜索,但没有找到答案。

提前谢谢你。

[编辑]

我想更新优缺点。

方法 1:发布/重定向/获取

优点

  • 安全!

缺点

  • 如果您需要用户的一些表单数据以在确认页面上显示,您需要使用 sessiondatabase 或其他东西。
  • 如果您使用session,并且有多个服务器,您必须采取措施使 session 在多个服务器上可用。

方法 2:禁用客户端刷新。

优点

缺点

  • 如果您限制浏览器的标准功能(例如刷新),用户会感到不高兴。
  • 需要考虑F5、Ctrl+F5、⌘+F5等各种刷新图标。
  • 在移动设备中,许多网络浏览器会在用户重新加载浏览器时自动刷新页面。

方法 3:发布/发布

优点

  • 您不必担心跨多个服务器的 session 共享问题。

缺点

  • 第二个表单提交可能会失败。

最佳答案

方法 1 是一种非常直接的方法,可以解决一些重复的帖子问题。它无法应对服务器延迟,这是重复提交的原因。

方法 2 完全错误。如果你限制浏览器的标准功能,比如刷新,用户会感到不安。也就是说,如果您甚至能够在技术上跨浏览器这样做。您需要考虑 F5、Ctrl+F5、⌘ + F5 等各种刷新图标。

我必须承认我并不完全理解方法 3 的意图,但是,将用户跳转到一个空页面感觉有点不对。

另一种标准方法是在表单帖子中使用公告。这也将帮助您避免名为 Cross Site Request Forgery 的安全风险。 .这很简单。

  1. 在服务器上生成一个“唯一”的随机字符串,称为 nonce。
  2. 将随机数插入数据库。
  3. 将随机数附加到表单作为隐藏字段(或通过 URL 或类似方式传递)。
  4. 确保 nonce 以表单的形式发送到服务器。
  5. 在服务器端,验证随机数,删除随机数,“保存表单数据”。
  6. 显示确认页面。

如果您收到另一个带有不存在的随机数的请求,那么您就知道它要么是重复的帖子,要么是某种更邪恶的 CSRF 攻击。

你可能会找到some support library就是为你做的。

关于java - 为什么是 PRG 模式而不是其他模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27874233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com