相同的原产地政策 - 仍然没有得到它

时间:2017-08-03 15:31:48

标签: javascript same-origin-policy

起初我虽然相同的原始政策意味着从一个不同的域加载的JS无法在页面上执行。但在阅读thisthisthis后,我感到困惑。声称如果您在脚本标记的src属性中加载JS,则加载的脚本与加载页面具有相同的来源,这意味着来自CDN或第三方(Google anaytics等)的所有内容现在都具有完全访问权限对我来说,这看起来像一个可怕的安全漏洞。这意味着如果CDN或类似的东西遭到破坏,攻击者可以提供恶意JS,例如,可能从多个站点窃取用户名/密码。所以我是否正确理解了这一点?

4 个答案:

答案 0 :(得分:4)

  

声称如果您在脚本标记的src属性中加载JS,则加载的脚本与加载页面具有相同的来源,

是。原点由HTML文档的来源定义,而不是其他任何内容。

  

这意味着来自CDN或第三方(Google anaytics等)的所有内容现在都可以完全访问DOM等。

是。这就是为什么你必须完全信任允许在你的页面上执行的任何JS的来源。

  

对我来说,这看起来像一个可怕的安全漏洞。这意味着如果CDN或类似的内容遭到破坏,攻击者可以提供恶意JS,例如,可能会从多个站点窃取用户名/密码。

这是一种风险。 It has happened in the past

如果您选择使用CDN,那么您必须相信它们在安全性方面足够好,以至于不会发生。

至于同源政策实际上做了什么:See this answer

答案 1 :(得分:1)

你确实理解了这一点。从第三方加载脚本是一种可怕的安全风险,并且多次使用广告网络或分析提供商在其他未经破坏的网站上传播恶意内容。

不,不存在同源政策,以防止出现这种情况。它旨在保护提供给用户的机密数据不被任意其他域上的XHR(和其他技术)访问。

答案 2 :(得分:0)

这绝对是您在使用CDN时所承担的风险 - 因此,浏览器现在开始实施Subresource Integrity(SRI),它允许您在脚本/链接标记上放置校验和 - Bootstrap docs提供了一个例子:

<link rel="stylesheet" 
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 
    integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" 
    crossorigin="anonymous">

如果哈希与加载的实际文件的哈希不匹配,则资源被阻止。这显然只能保护使用支持SRI的浏览器的用户。

答案 3 :(得分:-1)

我已将我的评论作为答案,因此我可以引用完整性的参考

您正确理解CORS / SOP,但不能使用它。

CORS&amp; SOP并不意味着防止XSS攻击 - 它们旨在允许主机保护访问其数据的人员。

请参阅以下内容,摘自https://security.stackexchange.com/questions/108835/how-does-cors-prevent-xss

  

TL; DR:CORS如何阻止XSS?它不是。这并不意味着这样做。

     

CORS旨在允许资源主机(通过HTTP提供其数据的任何服务)限制哪些网站可以访问该数据。

     

示例:您正在托管一个显示流量数据的网站,并且您正在使用网站上的AJAX请求。如果没有SOP和CORS,任何其他网站都可以通过简单的AJAX到您的终端来显示您的流量数据;任何人都可以轻松地偷窃&#34;您的数据以及您的用户和资金。

     

在某些情况下,意图共享数据(跨源资源共享),例如在您的网页上显示来自Facebook API的喜欢和内容时。由于上段中解释的原因,简单地删除SOP以实现这一点是一个坏主意。所以介绍了CORS。

     

CORS与XSS无关,因为任何可以将恶意JavaScript放入网站的攻击者也可以设置一个发送正确CORS头的服务器。 CORS无法阻止恶意JavaScript将会话ID和permlogin cookie发送回攻击者。