同源政策很容易被规避?
Posted
技术标签:
【中文标题】同源政策很容易被规避?【英文标题】:Same Origin Policy easily circumvented? 【发布时间】:2020-12-05 16:08:09 【问题描述】:我读过一篇文章,它使用Cors-Anywhere 发出示例 url 请求,这让我想到了绕过同源策略是多么容易。
虽然浏览器会阻止您直接访问错误,并在未通过预检请求时完全取消请求,但简单的节点服务器无需遵守此类规则,可以用作代理。
所有需要做的就是将'https://cors-anywhere.herokuapp.com/'
附加到恶意脚本中请求的url的开头,瞧,你不需要通过CORS。
作为sideshowbarker pointed out,部署您自己的 Cors-Anywhere 服务器需要几分钟时间。
这不是让 SOP 作为一种安全措施变得毫无意义吗?
【问题讨论】:
【参考方案1】: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 本身(即技术上不可能)。
【讨论】:
以上是关于同源政策很容易被规避?的主要内容,如果未能解决你的问题,请参考以下文章