阅读有关CORS的内容后,我不了解它如何提高安全性。
CORS不能提高安全性。CORS为服务器提供了一种机制,以告知浏览器外部域应如何访问它们,并且它试图以与CORS之前存在的浏览器安全模型(即,相同起源策略)一致的方式进行访问。
但是,同源起源策略和CORS的范围有限。具体来说,CORS规范本身没有拒绝请求的机制。它可以使用标头来告诉浏览器不要让来自外部域的页面读取响应。并且,对于预检请求,它可以要求浏览器不要向外部域发送某些请求。但是,CORS没有指定服务器拒绝(即不执行)实际请求的任何方式。
让我们举个例子。用户A
通过cookie登录到站点。用户加载恶意网站M
,它试图提交,做了一个表格POST
来A
。会发生什么?好吧,无论是否具有CORS,以及M
是否具有允许的域,浏览器都将A
使用用户的授权cookie将请求发送到,服务器将执行恶意程序POST
,就像用户发起了该恶意程序一样。
这种攻击称为“跨站请求伪造”,而CORS本身并没有采取任何措施来缓解它。因此,如果您允许请求代表用户更改数据,那么CSRF保护如此重要。
现在,Origin
标头的使用可能是CSRF保护的重要组成部分。实际上,对其进行检查是当前针对多管CSRF防御的建议的一部分。但是Origin
头的使用不在CORS规范范围内。
总而言之,CORS是将现有的“相同来源策略”安全模型扩展到其他接受域的有用规范。它不会增加安全性,并且站点需要与CORS之前相同的防御机制。