Javascript 了解AJAX CORS和安全注意事项

Javascript 了解AJAX CORS和安全注意事项,javascript,ajax,cross-domain,cors,Javascript,Ajax,Cross Domain,Cors,我试图理解为什么CORS是以这种方式工作的 正如我从中了解到的,当来自www.a.com的页面向www.b.com发出AJAX请求时,决定是否允许请求的是www.b.com 但在这种模型中,客户机上的安全性到底是什么? 例如,如果黑客成功向我的页面注入XSS脚本,那么它会向他的域发出AJAX请求以存储用户数据。所以黑客的域名肯定会允许这样的请求 我认为www.a.com应该决定允许请求访问哪些域。因此,从理论上讲,在一个header中,我想列出允许AJAX CORS请求的所有域的列表 有人能解释

我试图理解为什么CORS是以这种方式工作的

正如我从中了解到的,当来自www.a.com的页面向www.b.com发出AJAX请求时,决定是否允许请求的是www.b.com

但在这种模型中,客户机上的安全性到底是什么? 例如,如果黑客成功向我的页面注入XSS脚本,那么它会向他的域发出AJAX请求以存储用户数据。所以黑客的域名肯定会允许这样的请求

我认为www.a.com应该决定允许请求访问哪些域。因此,从理论上讲,在一个header中,我想列出允许AJAX CORS请求的所有域的列表

有人能解释一下当前CORS实现所处理的安全问题吗

正如我从这篇文章中了解到的,当
www.a.com
的页面向
www.b.com
发出AJAX请求时,决定是否允许请求的是
www.b.com

不完全是。请求未被阻止(至少,如果被阻止的话)

默认情况下,运行在
www.a.com
上的JavaScript被禁止从
www.b.com
访问响应

CORS允许
www.b.com
www.a.com
上的JavaScript授予访问响应的权限

但在这种模型中,客户机上的安全性到底是什么

它阻止
www.a.com
的作者使用访问过这两个站点并在
www.b.com
上经过身份验证的用户的浏览器从
www.b.com
读取数据(因此可以访问非公开的数据)

例如,Alice登录到Google。Alice访问了
恶意。示例
,它使用XMLHttpRequest从
gmail.com
访问数据。Alice有一个GMail帐户,因此回复的收件箱中有一个最新电子邮件的列表。同源策略可防止
恶意。例如
读取它

例如,黑客成功地将XSS脚本注入到我的页面,然后它向他的域发出AJAX请求以存储用户数据。所以黑客域名肯定会允许这样的请求

对。XSS是一个不同的安全问题,需要在源代码处解决(即在
www.a.com
而不是在浏览器中解决)。

此外,还有另一种称为的技术,它描述了您所追求的目标

我认为www.a.com应该决定允许请求访问哪些域。因此,从理论上讲,在头访问控制Allow Origin中,我想列出允许AJAX CORS请求的所有域的列表

使用CSP,您可以从您的域中设置一个头(示例中为
www.a.com
),以限制AJAX请求:

connect src限制您可以连接的源(通过XHR、WebSocket和EventSource)

因此,要使用它,您可以将此
内容安全策略
HTTP头添加到HTML响应中:

Content-Security-Policy: connect-src 'self'
这将把AJAX请求限制在
www.a.com
上,如果该头出现在
www.a.com
的响应中:

“self”匹配当前源,但不匹配其子域


对于支持的浏览器。

是的,没错,提供数据的域(saas)可以列出其“允许”的域。(ACAO)之后,SaaS有责任确保请求安全(通过常规的“web服务器”手段-字符串清理、捕获DSA等)