Ajax 当像JSONP和CORS这样的解决方案存在时,为什么浏览器有相同的源策略?

Ajax 当像JSONP和CORS这样的解决方案存在时,为什么浏览器有相同的源策略?,ajax,security,jsonp,cors,xss,Ajax,Security,Jsonp,Cors,Xss,这个问题有点重复: 然而,这个答案并不令人满意,因为它没有解决存在变通办法的事实(如问题中所述)。答案只解决了与XMLHttpRequest直接相关的安全问题,但这些问题仍然存在于JSONP中(可能还有CORS,不确定)。所以问题仍然存在——为什么要有一个严格的同源策略,而像JSONP这样的变通方法可能更糟糕(因为它是可执行的而不是静态内容) 下面是一个例子: Company.com希望对一些不受保护的资源进行AJAX调用,比如用于某些数据查找的简单公共API。Company.com意识到这可能

这个问题有点重复:

然而,这个答案并不令人满意,因为它没有解决存在变通办法的事实(如问题中所述)。答案只解决了与XMLHttpRequest直接相关的安全问题,但这些问题仍然存在于JSONP中(可能还有CORS,不确定)。所以问题仍然存在——为什么要有一个严格的同源策略,而像JSONP这样的变通方法可能更糟糕(因为它是可执行的而不是静态内容)

下面是一个例子: Company.com希望对一些不受保护的资源进行AJAX调用,比如用于某些数据查找的简单公共API。Company.com意识到这可能是不安全的,因此他们将仔细清理数据,以确保没有有趣的业务。但是,XMLHttpRequest不允许这样做,因此Company.com必须使用JSONP,但这将阻止数据清理,并可能导致攻击者将任意Javascript注入页面。这是一个更好的解决方案吗

另一个例子: Company.com有一个漏洞,攻击者可以将Javascript注入页面,然后某个用户可以查看该页面(这种情况有一百万种发生方式;这可能是最常见的网站攻击)。在严格的同源策略下,攻击者可以整天乱动页面,但不能“呼叫总部”,这是一个重要的细节,因为这意味着您的所有数据都是安全的。但是JSONP(和图像标签)通过允许攻击者从页面中刮取您的所有个人数据并将其发送到任何地方来打破这一点。即使使用CORS,这仍然是一个现实,因为我可以告诉我的rogue服务器允许来自任何域的入站XS请求


换句话说,在什么情况下,锁定的XMLHttpRequest实际上提供了更高程度的安全性?

您的前提是不正确的。同源策略没有说明网页是否能够包含外部域上的资源。它防止通过脚本直接访问不同来源的资源,而无需他们选择

因此,COR和JSONP不是同一来源策略的变通方法。CORS使源站能够选择加入带有响应的XHR请求,而JSONP只是一种允许外部引用将动态数据返回到页面的攻击

这里的要点是保护您的页面,这样一开始就不可能做到这一点。要做到这一点,重点应该放在。这将防止“打电话回家”,因为一开始就不可能进行攻击。A可以帮助消除任何试图从网络中溜走的脚本。在您的网站上定期进行安全漏洞评估时,应获取未编码的输出-将CSP视为填补这些漏洞被发现和修复之间的空白,尽管尚未完全解决-尤其是使用Internet Explorer

但是,XMLHttpRequest不允许这样做,因此Company.com必须使用JSONP,但这将阻止数据清理,并可能导致攻击者将任意Javascript注入页面。这是一个更好的解决方案吗

事实并非如此。CORS是一个更好的解决方案,因为请求检索数据而不是可执行代码。CORS允许XMLHttpRequest这样做

使用CORS响应头
Access Control Allow Origin
时,
example.com
的网站所有者可以将其设置为

Access-Control-Allow-Origin: https://company.com 
仅允许通过用户浏览器通过HTTPS对数据进行
company.com
客户端访问

在这个CORS场景中,
example.com
仅信任
company.com
对该特定请求的数据响应。结合
访问控制允许凭证
标题,他们可以选择在浏览器中请求用户发送任何授权cookie,并在
company.com
上通过JavaScript读取响应


在JSONP场景中,
company.com
将信任
example.com
及其整个来源。这意味着他们信任整个客户端站点安全模型
Example.com
可以做任何它想做的事情
company.com
。因此,如果
example.com
被黑客入侵,他们还可以在每个用户访问包含
的页面时控制
company.com
用户会话,因此您的意思是:“如果您在站点上实施CORS,并且您的站点没有被黑客入侵,那么您的端点是安全的。”这是正确的,但它没有回答我的问题。我的网站无法阻止对不受信任域的出站请求。以你的例子来说,如果我向你发送一封带有恶意javascript的电子邮件,我可以使用cors、jsonp等将你的所有私人数据发送到我的服务器。同源策略不会阻止页面引用外部资源,因此cors和jsonp不是它的解决方法。这里的要点是保护您的页面,以便XSS从一开始就不可能实现。这将阻止“打电话回家”。查看内容安全策略以获得更多帮助,不过请检查对目标浏览器的支持。啊哈,这就是我一直在寻找的答案。编辑你的答案,包括这一点,我会接受。JSONP实际上是不安全的,如果做得不正确。看,我想你没有读过这个问题。关键是JSONP是不安全的。
https://gmail.com/services/inbox/get_conversations
Access-Control-Allow-Origin: https://google.com