【问题标题】:Clarification on "Cross Domain Ajax" Security Issues关于“跨域 Ajax”安全问题的说明
【发布时间】:2014-02-16 01:06:33
【问题描述】:

假设我们允许跨域 Ajax 请求。

代码如下所示:

  $.post('http://google.com/get/emails/all', function(emails){
          // I can see your emails
          readAllEmails(emails);
    });

这个电话有什么安全风险,mail.google.com 不会拒绝这个请求然后就结束了吗?

编辑 澄清上面的问题。

在上面的场景中,cookie 被发送到 mail.google.com。是您的浏览器当前存储的所有 cookie 还是只是域 cookie?如果它是所有的 cookie,那么我理解为什么跨域 ajax 调用是一个问题。但是,如果是这种情况,我不明白为什么浏览器会发送所有 cookie,有什么好处?

【问题讨论】:

  • 你从哪里得到这个?这不是跨域 AJAX 所做的。
  • 您的理解存在严重缺陷。来自 John Doe 的不良站点的页面无法mail.google.com 进行 AJAX 调用。这样做会违反同源政策,因此是不允许的。跨域 AJAX 仅允许拥有不损害某人隐私或财产的设施的站点。谷歌邮件不是这样的网站,但(有一些限制)谷歌地图可能是这样的一个例子。
  • @Pointy 我已经更新了我的问题。我的问题的第一部分是针对我要问的另一个问题。
  • "不会 mail.google.com 拒绝该请求" 那么,假设这可行,您为什么认为 mail.google.com 可以拒绝该请求?我认为,如果这确实有效,他们可能无法区分用户发起的请求和恶意脚本发起的请求,这首先是整个问题。
  • @Mr. Smee:这是不正确的,因为用户会有 cookie,因为您正在执行对 google.com 的请求,您有 cookie。 Cookie 是根据您发送到的域发送的,而不是您发送的位置。

标签: javascript ajax javascript-security


【解决方案1】:

由于浏览器中的同源策略,默认情况下会拒绝跨域 AJAX 调用。这意味着从 yourdomain.com 加载的网页执行 JavaScript 不能对 mail.google.comyourdomain.com 之外的其他域进行 AJAX 调用。

Modern browsers 允许通过Cross Origin Resource Sharing (CORS) 对其他域进行有限的 AJAX 调用。这允许像www.publicapi.com 这样的另一个站点通过为允许的域和方法指定Access-Control- 标头来通过AJAX 授权跨域请求。这些 CORS 请求在受限访问上下文中运行,不会为 www.pulicapi.com 或 HTTP 授权获取/设置 cookie。

某些浏览器允许通过 Access-Control-Allow-Credentials 标头启用 cookie/授权,但这对大多数应用程序来说是危险的。

特别是,如果yourdomain.com 上的 HTML 尝试通过 AJAX 访问 mail.google.com,它将失败。如果mail.google.com 为某些 API 启用了 CORS 访问,您可以读取公共数据,但无法通过 cookie 或 HTTP auth 进行身份验证。如果mail.google.com 设置Access-Control-Allow-Credentials 标头,您的浏览器支持它,并且您在mail.google.com 上有一个预先存在的会话,您可以作为您的登录用户发出AJAX 请求。

这是 Google Mail 的主要安全风险,永远不会启用。但是,对于公共 API 或本质上是公共数据,CORS 可以跨域启用 AJAX。

【讨论】:

  • 我的问题更多是安全风险是什么,但@zerkms 回答说发送的 cookie 是属于正在请求的网站的 cookie,而不是请求的网站。这主要回答了我的问题,我仍然不清楚为什么浏览器会发送请求 cookie 而不是请求者 cookie。我也很想看到一篇关于 cookie 的文章。
【解决方案2】:

是您的浏览器当前存储的所有 cookie 还是 只是域 cookie?

只是域。发送所有域 cookie 将是一场灾难。

无论如何,我认为这是同一主题:

Why the cross-domain Ajax is a security concern?

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2011-07-11
    相关资源
    最近更新 更多