防止XSRF攻击GWTP应用程序

时间:2012-08-15 11:19:01

标签: security gwt csrf gwtp

我正在尝试使用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的正确方法?

1 个答案:

答案 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实现保护。