代码之家  ›  专栏  ›  技术社区  ›  Sripathi Krishnan

GWT RPC-它是否足以防止CSRF?

  •  10
  • Sripathi Krishnan  · 技术社区  · 16 年前

    更新 :gwt 2.3引入了更好的机制来抵御XSRF攻击。见 http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.html


    GWT的RPC机制对每个HTTP请求执行以下操作-

    1. 设置两个自定义请求头-x-gwt-permutation和x-gwt-module-base
    2. 将内容类型设置为text/x-gwt-rpc;charset=utf-8

    HTTP请求始终是一个POST,在服务器端,get方法引发异常(不支持方法)。

    此外,如果未设置这些头文件或这些头文件的值错误,则服务器将无法处理,并出现异常“可能是CSRF?”或是有这种效果的东西。

    问题是:这是否足以防止CSRF?在纯跨站点请求伪造方法中,是否有一种设置自定义头和更改内容类型的方法?

    4 回复  |  直到 10 年前
        1
  •  6
  •   rook    10 年前

    如果此GWT RPC正由浏览器使用,那么它100%易受CSRF攻击。可以在HTML中设置内容类型 <form> 元素。 X-GWT-Permutation 和 X-GWT-Module-Base 不在flash的黑名单上 banned headers . 因此,可以使用flash进行CSRF攻击。对于CSRF保护,唯一可以信任的头元素是“referer”,但这并不总是最好的方法。尽可能使用基于令牌的CSRF保护。

    以下是我所写的一些漏洞,应该对我描述的模糊攻击有所了解。这方面的flash漏洞看起来像 this 和 here 是更改内容类型的JS/HTML漏洞。

    我的漏洞是为flex 3.2编写的,flex 4(flash 10)中的规则已经改变了,这里是 latest rules ,大多数头只能为请求投递操作。

    使用的Flash脚本 navigateTo() 对于CSRF: https://github.com/TheRook/CSRF-Request-Builder

        2
  •  4
  •   rjrjr    15 年前

    GWT2.3引入了一种更好的机制来抵御XSRF攻击。见 GWT RPC XSRF protection

        3
  •  3
  •   Sripathi Krishnan    16 年前

    我知道我问了这个问题,但是经过一天的研究(感谢鲁克的指点!)我想我知道答案了。

    GWT提供的开箱即用不会保护您免受CSRF的影响。你必须采取记录在案的步骤 Security for GWT Applications 保持安全。

    GWT RPC将“content-type”头设置为“text/x-gwt-rpc;charset=utf-8”。虽然我找不到使用HTML表单来设置它的方法,但在Flash中这样做很简单。

    自定义头文件-x-gwt-permutation和x-gwt-module-base有点复杂。不能使用HTML设置它们。而且,他们 不能 除非服务器在crossdomain.xml中特别允许,否则使用flash进行设置。见 Flash Player 10 Security 。

    此外,当SWF文件希望 将自定义HTTP头发送到任意位置 除了它自己的宿主, 必须在上有策略文件 请求所在的HTTP服务器 正在发送。此策略文件必须 枚举SWF文件的主机 源(或更大的主机集)为 允许发送自定义请求 到该主机的头。

    现在GWT的RPC有两种味道。有旧的自定义序列化格式rpc和新的基于json的derpc。afaict,客户机代码总是设置这些请求头。旧式的RPC现在不在服务器端强制这些头文件,因此CSRF攻击是可能的。新样式的de rpc强制这些头文件,因此可能攻击它们,也可能不攻击它们。

    总的来说,如果您关心安全,请确保在您的请求中发送强大的CSRF令牌,以及 不要 依靠GWT为您预防。

        4
  •  0
  •   Chris Lercher    16 年前

    我不确定,如果有一个简单的方法(我也会非常有兴趣找到答案!),但至少有一些高级方法可以实现具有任意头的任意跨站点请求: http://www.springerlink.com/content/h65wj72526715701/ 我还没有买这篇论文,但是摘要和导言听起来很有趣。

    也许这里有人已经阅读了这篇论文的完整版本,并且可以稍微扩展一点?

    推荐文章