CORS (跨域资源共享) 详细原理解析
1. 什么是CORS
CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种网络浏览器技术规范,用于绕过浏览器的同源策略(SOP),允许网页脚本能够向不同源的服务器发起请求,从而实现跨域访问。CORS 可以使网页从一个域名请求另一个域名的资源,而不受同源策略的限制。
2. 同源策略简介
同源策略(Same-Origin Policy)是Web安全的核心基石,规定了一个源的脚本在默认情况下只能读取相同源的网络资源。源的定义包括三个部分:协议、域名和端口。只有当这三者完全相同,两个URL才属于同一个源。
3. 同源检测示例
当一个网页尝试请求另一个源(例如,从https://example.com
请求https://api.other.com
)的资源时,浏览器会基于URL的协议、域名和端口来判断是否属于同一源。如果不是,浏览器将默认阻止这种跨源HTTP请求。
4. 漏洞产生原因
CORS漏洞通常产生于服务器端配置不当。如果服务器在处理CORS请求时,过于宽松地接受了任意的Origin值或未正确验证Origin值的有效性,就可能允许未经授权的站点访问敏感数据。
5. 两种跨域方式
-
JSONP(JSON with Padding):
利用<script>
标签的特性来进行跨域请求,只支持GET请求。通过动态创建<script>
标签的方式来获取其他域上的JSON数据,然后在本地执行回调函数。 -
CORS跨域请求:
相比JSONP更为先进和安全,支持多种HTTP请求方法(如GET、POST、DELETE等)。通过在HTTP请求中添加特定的CORS相关头部来告知浏览器这是一个安全的跨源请求。
6. CORS的请求方式
-
简单请求:
直接发出CORS请求,自动添加Origin
头部。服务器响应中包含Access-Control-Allow-Origin
等CORS响应头,浏览器根据这些头部决定是否允许跨域。 -
非简单请求(预检请求):
在正式通信之前,浏览器先发送一个OPTIONS请求,称为“预检”请求,来询问服务器是否允许该跨域操作。此请求包括Access-Control-Request-Method
和Access-Control-Request-Headers
等头部。服务器必须确认这些请求头部和方法都是允许的,才能继续处理实际的请求。
7、 返回包头部的ACAO根据请求报文Origin生成
8、CORS漏洞与CSRF漏洞
相同点
(1)都需要借助第三方网站
(2)都需要借助ajax的异步过程
(3)一般都需要用户登陆
不同点
(1)第三方网站可以利用CORS漏洞读取到受害者的敏感信息
(2)第三方网站可以利用CSRF漏洞替受害者完成诸如转账等敏感操作
免费领取安全学习资料包!
渗透工具
技术文档、书籍
面试题