同一原产地政策和CORS-什么';重点是什么?

同一原产地政策和CORS-什么';重点是什么?,cors,same-origin-policy,Cors,Same Origin Policy,我在理解同一原产地政策以及“解决”同一原产地政策的不同方法时遇到一些困难。 很明显,同源策略作为安全措施存在,因此来自服务器/域的一个脚本无法访问来自另一个服务器/域的数据。 同样清楚的是,有时候,打破这一规则是很有用的,例如,mashup应用程序从不同的服务器访问信息,以构建所需的结果。其中一种方法是CORS。 1) 如果我没有错,CORS允许目标服务器通过在响应中添加一些标题对浏览器说“您可以从我这里获取数据/代码”。但是,如果这是正确的,这意味着恶意服务器可以只添加此标头,浏览器将允许检索

我在理解同一原产地政策以及“解决”同一原产地政策的不同方法时遇到一些困难。

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

同样清楚的是,有时候,打破这一规则是很有用的,例如,mashup应用程序从不同的服务器访问信息,以构建所需的结果。其中一种方法是CORS。

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

2) 另一方面,我们有JSONP,允许我们在不启用CORS的情况下从服务器检索任意代码或数据,从而避免了SOP的主要目标。因此,能够管理JSONP的恶意服务器甚至可以通过浏览器中的SOP硬连线来注入数据或代码。

所以我的问题是:

第二个论点正确吗?是否由服务器决定浏览器是否必须接受内容? 第二个论点正确吗?同样,浏览器不决定是否接受数据?

JSONP不会使SOP变得无用吗?


谢谢你启发我

此处需要注意的重要事项是,如果用户登录到某个站点,并且请求删除了该用户的帖子,则以下代码将删除该用户的帖子:

<script src="http://example.com/delete?id=1" />

这称为CSRF/XSRF攻击(跨站点请求伪造)。这就是为什么大多数服务器端web应用程序需要事务票证的原因:而不是必须这样做

现在,以下攻击将不起作用:

<script src="http://example.com/delete?id=1" />

…因为它不包含txid参数。现在,让我们考虑一下,如果网站可以使用XMLHTTPREQUEST访问会发生什么。在用户浏览器上运行的脚本可以在用户背后检索和解析、提取txid,然后请求

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

<script src="http://example.com/pageThatContainsDeleteLink" />

…但它没有帮助,因为结果是一个HTML页面,而不是一段JavaScript代码。因此,您可以包括来自其他站点的,但不能通过XmlHttpRequest访问其他站点的

您可能有兴趣阅读以下内容:

这种攻击在当时对Gmail有效,并允许您从另一个站点上运行的JavaScript代码中获取用户的邮件。这一切都表明WWW的安全模型非常微妙,没有得到很好的考虑。它不是精心设计的,而是不断发展的


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

这是一个非常有争议的解释,解释了为什么必须实施同源策略。然而,我的问题是,这个策略是否可以简单地用启用CORS的恶意服务器覆盖,或者用JSONP作为远程数据/代码检索机制覆盖。哦,我明白了。我编辑了答案,试图回答你真正的问题。因此,使用我的CSRF/XSRF攻击不会有安全问题,因为启用CORS/JSONP会在他们的站点上打开一个安全漏洞,而不是在其他站点上。我开始看到隧道尽头的曙光。。。因此,能够运行远程邪恶代码的唯一方法是在example.com域中注入一个页面,并在邪恶服务器上启用CORS。这将迫使浏览器忽略同源策略。谢谢首先:如果我有
mysite.com
,并且我正在向
example.com
发出请求,那么用户之前是否登录又有什么关系呢?他们在一个站点上所做的应该如何影响一个完全不同的站点?另外,对于
,浏览器不会发送
GET
请求吗?如果一个
GET
删除了一个资源,这似乎是
example.com
的错误。对于一个普通用户来说是的,这有点有用,但是如果你可以尝试进行CSRF/XSRF攻击,那么你也知道如何使用cURL,它可以100%忽略同源策略。它太过时了,只会让开发人员感到恼火