代码之家  ›  专栏  ›  技术社区  ›  Mark Lutton

REST和CSRF(跨站点请求伪造)

  •  13
  • Mark Lutton  · 技术社区  · 16 年前

    跨站点请求是否可以伪造无状态的RESTful服务?

    我不是说伪REST,服务器会记住您是通过cookie登录的。我说的是服务器上的纯无应用程序状态,没有cookie。

    我正在使用SSL和基本身份验证。对于每个请求,该授权头都必须存在。在JSP意义上没有“会话”,尽管在SSL级别上有某种类型的会话。

    所以假设我正在查看生成Ajax请求的合法网页,并且不知何故我在同一个选项卡或不同的选项卡中转到不同的页面,而该页面生成相同的Ajax请求。(我假设合法网页上没有恶意代码;这完全是另一回事,在这种情况下任何事情都是可能的。)

    当第二个页面发出Ajax请求时,浏览器会放在同一个授权头上吗?也就是说,浏览器会说“哦,你想再来一次吗?”嘿,我刚好还有钥匙!”是吗?

    另外,恶意脚本不能执行XHR请求,然后在回调中从ioargs获取请求,获取授权头和un-base64的名称和密码吗?

    1 回复  |  直到 13 年前
        1
  •  4
  •   Stefan Tilkov    16 年前

    免责声明:我不是安全专家。

    使用HTTP基本身份验证不会通过GET请求阻止CSRF攻击。例如,其他人可以在他们的HTML页面中包含一个img标记,该标记可以访问某个著名的URI,并且您的浏览器会很高兴地发送基本的auth信息。如果get操作是“安全的”(这是任何声称是RESTful的东西的1规则),这不会产生问题(超出浪费的带宽)。

    Ajax不是一个问题,因为有相同的源策略。

    只有在您生成的HTML中包含服务器生成的令牌,并在表单提交请求中验证它的存在,才能保护您不受其他人的影响,而其他人只需在其页面中包含一个“外部”表单。您可以将此限制为浏览器生成的内容类型;对于XHR请求,不需要这样做。

    推荐文章