1

我已经阅读了几个依赖于向响应添加更多令牌的 XSRF 解决方案,这些解决方案确实有助于保护仅在 POST 上运行的代码。

即,这将是依赖于响应 HTTP GET 的页面的一步攻击

<img src="http://amazon.com/buybook/anarchistscookbook/mailto/me/execute.php">

但是使用更好的库(如 jquery),编写恶意 javascript XmlHttpRequest 脚本变得更加容易,可以进行两步攻击(GET,解析 Anti-XSRF 视图状态/查询字符串/额外 cookie 等),然后提交 POST。(或者是吗?我不担心 AES 很快就会被破解,我是否应该担心针对 HTTP POST 操作的 2 步 XSRF 攻击变得像上面显示的 img 标签攻击一样容易?)

我想一步攻击主要可以通过不对 GET 做任何敏感的事情来阻止,这两种攻击都可以通过要求网站用户解决 CAPTCHA 来阻止,然后它会产生一个查询字符串令牌,所有 URL 都需要这个令牌会议的其余部分?

到目前为止,它似乎只有在 CAPTCHA 失败时才会失败,例如 OCR 软件是否可以读取文本或是否有机械土耳其人组件。

编辑:考虑到的特定攻击是带有 xhr javascript 或图像标签的电子邮件。因此代码将在电子邮件客户端的浏览器或从本地文件系统加载的 HTML 页面中执行。为简单起见,我认为该站点没有 XSS 漏洞(即恶意用户没有机会将其 HTML 注入站点作为响应发送的 HTML 中)

4

3 回答 3

1

关键是JavaScript无法从跨域上下文中读取anti-XSRF token,而且XMLHTTPRequest只是同源的,所以不能用来窃取token。

如果您的网站已经存在 XSS 漏洞,那么您已经被水淹没了,反 XSRF 令牌将无济于事。

于 2009-07-02T04:37:17.593 回答
1

如今,XmlHttpRequests 和 javascript 框架操作都不能跨域工作。那将是纯粹的精神错乱。如今的 CSRF 攻击通常包括您提到的图像标签或自动生成一个 POST 到另一个站点的表单。但是,检索反 XSRF 令牌(可能是基于每个会话生成的加密随机数)几乎是不可能的。只有当它是一个不检查用户会话和 IP 地址的非常糟糕的令牌时,才可能利用服务器端语言来检索它,然后将它与客户端 CSRF 结合起来。除了令牌之外,很多人只是通过检查引用者并阻止所有远程域来阻止 CSRF。由于域限制,几乎不可能使用 XmlHttpRequests 提交 CSRF。

无论如何,您不必担心 XmlHttpRequest 能够访问远程域。唯一可能发生的情况是如果你有 XSS 漏洞,在这种情况下,正如 EricLaw 所说,你已经被水洗了。

于 2009-07-02T04:44:38.187 回答
1

我认为您对同源政策感到困惑。请求本地文件中的 html 页面不会规避此策略。事实上,我相信更严格的规则适用于文件资源。您会发现本地 html 文件中的 Javascript 将无法成功请求检索非本地资源。

现代浏览器不允许本地 HTML 文件中的 Javascript 访问远程 HTTP 资源。

您在哪个浏览器中能够成功地从 file:/// 资源执行跨域 XHR?

我已经在 ie6、ie7、ie8、firefox 3、firefox 3.5 以及 windows 上的 chrome、opera 和 safari 的最新版本中对此进行了测试;他们都拒绝跨域的http请求。

<html>
<head>
<script 
  type="text/javascript" 
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $( '#xhr' ).append( 'replace me with remote xhr' );
    $( '#xhr' ).load( 'http://stackoverflow.com/', function() {
      $( '#xhr' ).append( 'xhr load complete' );        
    });
  });
</script>
</head>
<body>
  test
  <div id="xhr">original</div>
</body>
</html>

一些更旧的浏览器可能限制较少。

于 2009-07-02T09:06:20.813 回答