同源策略易被规避?

3

我读到一篇文章,用Cors-Anywhere实现了一个示例URL请求,这让我想到了同源策略可以很容易地被绕过。

虽然浏览器会防止你直接访问该错误,并在没有通过预检请求时取消该请求,但是简单的node服务器不需要遵守这样的规则,可以用作代理。

所需做的就是将 'https://cors-anywhere.herokuapp.com/' 添加到恶意脚本中请求的URL的开头,然后Voila,您无需通过CORS。

正如sideshowbarker指出的,只需要几分钟即可部署自己的Cors-Anywhere服务器。

这难道不使得SOP作为一项安全措施变得毫无意义吗?

1个回答

4
SOP的目的是通过源代码分离浏览器中存储的数据。如果您从domain1.tld获得cookie(或它为您在浏览器存储中存储了数据),则来自domain2.tld的Javascript将无法访问。这无法通过任何服务器端组件绕过,因为该组件仍然无法以任何方式访问。如果没有SOP,恶意站点就可以读取浏览器中其他网站存储的任何数据。
现在这也与CORS有关,正如您所指出的那样。通常情况下,如果javascript请求的响应来自于不同于运行页面来源的源,则您的浏览器将不会接收该响应。其目的在于,如果它起作用,您可以从用户已登录的站点获取信息。但是,如果您通过Cors-Anywhere发送它,则仍无法发送用户的会话cookie到其他站点,因为您仍然无法访问,该请求会作为代理发送到您自己的服务器。
Cors-Anywhere在未经身份验证的API中很重要。某些API可能会检查来源标头并仅响应其自己的客户端域。在这种情况下,当然,Cors-Anywhere可以添加或更改CORS标头,以便您可以从自己托管的客户端查询它。但是,SOP的目的不是为了防止这种情况,即使在这种情况下,API所有者也可以更轻松地将您的请求列入黑名单或限制其速率,因为它们都是由您的服务器代理的。
因此,简而言之,SOP和CORS不是我认为您所指的访问控制机制。它们的目的是防止和/或安全地允许对某些资源进行跨源请求,但它们并不意味着例如防止服务器端组件发出任何请求,或尝试验证客户端javascript本身(这在技术上不可能)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接