-1

假设我们允许跨域 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,有什么好处?

4

2 回答 2

3

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

现代浏览器允许通过跨域资源共享(CORS)对其他域进行有限的 AJAX 调用。这允许另一个站点通过为允许的域和方法www.publicapi.com指定标头来通过 AJAX 授权跨域请求。Access-Control-这些 CORS 请求在受限访问上下文中运行,不会获取/设置 cookiewww.pulicapi.com或 HTTP 授权。

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

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

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

于 2014-02-18T20:04:35.127 回答
1

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

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

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

为什么跨域 Ajax 是一个安全问题?

于 2014-02-22T08:31:40.700 回答