假设我们允许跨域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,有什么好处?
答案 0 :(得分:3)
由于浏览器中的同源策略,默认情况下拒绝跨域AJAX调用。这意味着从执行JavaScript的yourdomain.com
加载的网页无法向mail.google.com
或yourdomain.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身份验证进行身份验证。如果mail.google.com
设置Access-Control-Allow-Credentials
标题,您的浏览器支持它,并且您在mail.google.com
上有预先存在的会话,则可以将您的AJAX请求作为登录用户。
这对Google Mail来说是一个主要的安全风险,并且永远不会启用。但是,对于公共API或本质上公共数据,CORS可以跨域使用AJAX。
答案 1 :(得分:1)
是您浏览器当前存储或存在的所有Cookie 只是域名cookie?
只是域名。发送所有域名cookie将是一场灾难。
无论如何,我认为这是同一主题: