同源政策和CORS - 有什么意义?

Rob*_*rto 31 same-origin-policy cors

我在理解同源政策和"解决方法"的不同方法方面遇到了一些麻烦.

很明显,同源策略作为安全措施存在,因此来自服务器/域的一个脚本无法访问来自另一个服务器/域的数据.

同样清楚的是,有时,能够破坏此规则是有用的,因此例如mashup应用程序访问来自不同服务器的信息以便建立所需的结果.其中一种方法是CORS.

1)如果我没错,CORS允许目标服务器通过在响应中添加一些标题来向浏览器说" 你可以从我自己获取数据/代码 ".但是,如果这是正确的,这意味着恶意服务器可以只添加此标头,浏览器将允许检索来自该服务器的任何可能有害的数据或代码.

2)另一方面,我们有JSONP,允许我们从没有启用CORS的服务器中检索任意代码或数据,从而避免了SOP的主要目标.因此,即使在浏览器中使用SOP硬连线,能够管理JSONP的恶意服务器也能够注入数据或代码.

所以我的问题是:

第二个论证是否正确?是服务器决定浏览器是否必须接受内容?第二个论证是否正确?再次,不是在浏览器决定是否接受数据?

JSONP不能使SOP无用吗?

谢谢你的启发!!

juh*_*ist 17

这里需要注意的重要一点是,如果用户登录了网站http://example.com/并且请求http://example.com/delete?id=1删除了用户的帖子,那么以下代码将删除用户的帖子:

<script src="http://example.com/delete?id=1" />
Run Code Online (Sandbox Code Playgroud)

这称为CSRF/XSRF攻击(跨站点请求伪造).这就是为什么大多数服务器端Web应用程序需要交易票证的原因:而不是http://example.com/delete?id=1您必须执行http://example.com/delete?id=1&txid=SomethingTheUserCannotGuess

现在以下攻击不起作用:

<script src="http://example.com/delete?id=1" />
Run Code Online (Sandbox Code Playgroud)

...因为它不包含txid参数.现在,让我们考虑如果可以使用XmlHttpRequest访问该站点会发生什么.在用户的浏览器上运行的脚本可以在用户的​​后面检索并解析http://example.com/pageThatContainsDeleteLink,提取txid然后请求http://example.com/delete?id=1&txid=SomethingTheUserCannotGuess

现在,如果XmlHttpRequest无法访问具有不同来源的网站,尝试检索txid的唯一方法是尝试执行以下操作:

<script src="http://example.com/pageThatContainsDeleteLink" />
Run Code Online (Sandbox Code Playgroud)

...但它没有帮助,因为结果是一个HTML页面,而不是一段JavaScript代码.因此,有一个原因可以包含来自其他网站的<script>:s,但不能通过XmlHttpRequest访问其他网站.

您可能有兴趣阅读本文:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/

这次攻击在当天对Gmail起作用,并允许您从另一个站点上运行的JavaScript代码中获取用户的邮件.这一切都表明WWW的安全模型非常微妙而且没有充分考虑.它已经发展而不是精心设计.

至于你的问题:你似乎认为服务器http://example.com/是恶意的.事实并非如此.使用我的答案的符号,http://example.com/是攻击目标的服务器,http://attacker.com/是攻击者的站点.如果http://example.com/开启了使用JSONP或CORS发送请求的可能性,那么它可能会变得容易受到我刚才描述的CSRF/XSRF攻击.但这并不意味着其他网站会受到攻击.同样,如果http://attacker.com/开辟了使用JSONP或CORS发送请求的可能性,攻击者的网站就容易受到CSRF/XSRF攻击.因此,错误的服务器管理员可能会在自己的站点中打开一个漏洞,但这不会影响其他站点的安全性.

  • 这是一个非常充分论证的解释,为什么必须执行同源政策.但是,我的问题是,是否可以简单地使用启用了CORS的恶意服务器或使用JSONP作为远程数据/代码检索机制来覆盖此策略. (2认同)