Forms 如何在GWT中实现服务器端双重提交预防?
我正在用大量的表单构建一个GWT应用程序。我正在使用gwt平台及其调度模块 我认为下一步是防止服务器端的双重提交。问题是我不知道该怎么做 我想到了这样的事情:Forms 如何在GWT中实现服务器端双重提交预防?,forms,gwt,double-submit-prevention,Forms,Gwt,Double Submit Prevention,我正在用大量的表单构建一个GWT应用程序。我正在使用gwt平台及其调度模块 我认为下一步是防止服务器端的双重提交。问题是我不知道该怎么做 我想到了这样的事情: 当应用程序加载时,服务器向客户端提供一些生成的令牌 服务器将令牌存储在HTTPSession中 当客户端提交表单时,它将从(1.)随表单一起发送令牌 服务器检查HTTPSession内发送的令牌是否==令牌 在对客户端的应答中,它将发送一个新令牌 将令牌存储在HTTPSession中是否安全?或者我应该在服务器上创建一个HashMap,将
谢谢你首先要问自己的问题是:你想避免什么样的问题
- 通过双重提交
- 由同一用户同时提交,例如从不同的浏览器窗口提交
- 多个用户同时尝试预订
在我看来,避免这种情况的最佳解决方案通常不是使用“向购物车添加一个项目”之类的操作,而是“将项目的目标计数设置为1”。同样,您也可以使用序列号等。谢谢您的回答。问题1非常简单和直接。我想防止恶意用户,例如,试图用大量条目淹没我的数据库。这些家伙使用firebug或其他任何东西来修改原始JavaScript代码。因此,我们的想法是,每个表单提交都需要一个令牌,服务器可以检查。@Benjamin:我明白你的意思-是的,可以使用令牌,并将其存储在HTTPSession中(我不会将密码存储在那里,因为会话内容可以写入磁盘,但只要不围绕这些令牌构建安全性,这应该足够安全)。但是,我不知道这是否真的能阻止坏人涌入您的数据库:他们可以简单地要求服务器提供更多令牌。最后,这只是速率限制,但您可以通过直接对每个用户的保存操作进行速率限制来更容易地实现这一点。谢谢:)对于“每个用户”,您是指IP还是会话ID?因为目前将有一些表单,用户可以在不登录的情况下提交。关于HTTPSession,我还有一些问题:它到底是如何工作的?客户端是否会在每次请求时都将其内容发送到服务器?@Benjamin:好吧,如果用户可以在不登录的情况下提交,那么你可能会受到IP的限制-这并不理想,但你没有任何实际的选择HTTPSessions是如何工作的?您应该搜索主题,但要快速:不,他们不来回发送整个数据,他们只发送一个id(通常称为JSESSIONID,通常使用cookie),数据存储在服务器上(通常在服务器重新启动后仍然有效,具体取决于配置)。我强烈建议使用一些网络工具或插件(例如Firebug)来检查哪些数据实际上是通过网络发送的。