Access-Control-Allow-Origin和CORS背后的概念是什么?

时间:2014-02-21 16:13:37

标签: javascript xmlhttprequest cors same-origin-policy

我真的没有得到Access-Control-Allow-Origin和CORS。
如果我允许来自任何域的请求到我的页面,这是否意味着我的页面存在任何安全问题?

我一直认为,SOP可以确保无法在页面上运行任何脚本,该脚本会从另一台服务器请求数据,因为该数据可能是恶意的。但是,由于服务于恶意数据的服务器只能使用包含Access-Control-Allow-Origin:*的标头进行回复,因此可以从该服务器加载所有内容。
因此,只要有人设法将一段JS代码注入页面,就可以从属于攻击者的服务器加载每个恶意代码。

现在我假设Unitl,我必须启用跨域请求以允许我的页面上的代码从另一个域请求数据,但它似乎是相反的方式;另一个域必须允许我的域请求数据。 我真的没有看到这个概念的安全性好处。
任何人都可以解释这背后的概念,或者告诉我,如果我弄错了吗?

1 个答案:

答案 0 :(得分:5)

假设:

  • Alice,拥有浏览器的用户
  • Bob,网站所有者
  • Mallory,一个拥有网站的恶意网站所有者

Alice在Bob的服务器上有一个帐户。也许这是她的网络邮件。也许这是她的网上银行。也许这是她喜欢购物的地方。

Alice访问Mallory的网站,不知道它是邪恶的。

同源政策阻止Mallory的网站使用JavaScript告诉Alice的浏览器向Bob的网站发出请求,并将Alice的个人信息(例如她的银行余额)提供给Mallory的网站(因此也提供给Mallory)。

(有时候请求会被阻止,因为条件需要提前发出请求,有时请求会通过但是响应将不会提供给Mallory的网站。如果你想要防御攻击,请查看CSRF危险在于服务器在收到请求时所做的事情,而不是从响应中泄漏的信息。

CORS允许Bob说他网站上的资源不包含任何个人信息,因此允许其他网站访问它是安全的(或者可以信任某个特定网站的个人信息)。

  

所以只要有人设法将一段JS代码注入页面,

XSS是一个完全不同的安全问题。你需要阻止人们注入JS。