我正在尝试使用protecting against XSRF attacks GWTP应用。像JSESSION easliy这样的问题进入paroz testing tool,如果用户已经登录并且同时由paroz提出相同的服务器请求,则使用该工具。它使用更新的值执行相同的事务,这是一个安全问题。
要停止那个,需要创建每个请求新Cookie 并从客户端发送到服务器。
@SecurityCookie
public static final String securityCookieName = getRandomString(); //Not work
对于ClientModule
public class ClientModule extends AbstractPresenterModule {
@Override
protected void configure() {
bindConstant().annotatedWith(SecurityCookie.class).to(
NameTokens.securityCookieName);
在DispatchServletModule中
public class DispatchServletModule extends ServletModule {
@Override
public void configureServlets() {
bindConstant().annotatedWith(SecurityCookie.class).to(NameTokens.securityCookieName);
我想生成cookie randomally而不是'JSESSIONID'。怎么做/在哪里做?什么是在GWTP中为每个请求重新生成cookie的正确方法?
答案 0 :(得分:0)
对于通用gwt,请参阅XSRF protection
用于RPC调用:
RPC XSRF保护是使用RpcToken功能构建的,它允许使用 开发人员使用HasRpcToken接口在RPC端点上设置令牌 并通过该每个RPC调用包含该令牌 端点。
您必须重写要在获取令牌的回调中调用的rcp调用,但实现起来并不困难。
修改强>
我不明白需要一个随机的cookie名称。对于标准GWT保护,您必须指定集名称:
<context-param>
<param-name>gwt.xsrf.session_cookie_name</param-name>
<param-value>JSESSIONID</param-value>
</context-param>
您为gwtp明确指出的文档:
保护您的应用程序免受XSRF攻击,如中所述 GWT应用程序的安全性,您必须指定其名称 您要使用的安全Cookie 。 通过绑定字符串常量来完成此操作 在客户端和服务器上使用@SecurityCookie进行注释。
我认为用户是否登录并不重要。恶意代码无法读取JSESSIONID cookie(或您指定的任何cookie)并且它需要cookie的值(确保它可以发送cookie但是确实如此没有,因为恶意代码需要该值,因此它可以计算您发送每个请求的唯一令牌)。这就是文档所说的:
默认XSRF保护实现从a派生XSRF令牌 会话身份验证cookie,通过生成会话的MD5哈希值 cookie值并将结果哈希用作XSRF令牌。这个 无状态XSRF保护实现依赖于这一事实 攻击者无法访问会话cookie,因此无法访问 生成有效的XSRF令牌
所以你做需要指定你的cookie名称才能配置它才能工作,或 GWT不能使用该cookie的值来生成终点令牌您获得之前到每个rpc调用,包含每个rpc调用。
因此,虽然我认为您不需要实现自己的XSRF protection,因为您没有使用标准gwt,但我认为您确实需要遵循您引用的文档来配置gwtp以使用它的xsrf实现保护。