「 典型安全漏洞系列 」10.跨域资源共享CORS漏洞详解
创作时间:
作者:
@小白创作中心
「 典型安全漏洞系列 」10.跨域资源共享CORS漏洞详解
引用
CSDN
1.
https://blog.csdn.net/u013129300/article/details/137417698
跨域资源共享(CORS)是一种浏览器机制,可以对于给定域之外的资源进行受控访问。它扩展并增加了同源政策(SOP)的灵活性。然而,如果网站的CORS策略配置和实施不当,它也可能引发跨域攻击。本文将详细介绍CORS漏洞的相关知识,包括同源策略、CORS原理、攻击步骤和防御措施。
1. 同源策略(SOP)
同源策略(Same-origin Policy,SOP)是浏览器的一种安全机制,旨在防止网站相互攻击。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问/操作另一个域的绝大部分属性和方法。
同源策略限制一个源上的脚本访问另一个源的数据。一个源包括一个URI协议、域名和端口号。例如,考虑以下URL:
http://normal-website.com/example/example.html
这使用 http 协议、域名 normal-website.com 和端口号 80 。下表显示了如果上述URL中的内容试图访问其他来源,将如何应用同源策略:
URL | 是否允许访问? |
|---|---|
是:相同的协议、域名和端口 | |
是:相同的协议、域名和端口 | |
否:不同的协议和端口 | |
否:不同的域名 | |
否:不同的域名 | |
否:不同端口 |
2. 跨域资源共享CORS
2.1. CORS概念
跨域资源共享(Cross-origin Resource Sharing,CORS)是一种浏览器机制,可以对于给定域之外的资源进行受控访问。它扩展并增加了同源政策(Same-origin Policy,SOP)的灵活性。以下介绍了与CORS相关的HTTP请求头和响应头字段:
请求头
字段 | 说明 |
|---|---|
Origin | 表明预检请求或实际请求的源站URI,不管是否跨域,Origin字段总是会发送 |
Access-Control-Request-Method | 将实际请求所使用的HTTP方法告诉服务器 |
Access-Control-Request-Headers | 将实际请求所携带的头部字段告诉服务器 |
响应头
字段 | 说明 |
|---|---|
Access-Control-Allow-Origin | 指定允许访问该资源的外域URI,对于携带身份凭证的请求不要使用通配符 |
Access-Control-Expose-Headers | 指定XMLHttpRequest的getResponseHeader可以访问的响应头 |
Access-Control-Allow-Credentials | 是否允许浏览器读取response的内容;当用在preflight预检请求的响应中时,指定实际的请求是否可使用credentials |
Access-Control-Allow-Headers | 指明实际请求所允许使用的头部字段 |
Access-Control-Allow-Methods | 指明实际请求所允许使用的HTTP方法 |
Access-Control-Max-Age | 指明preflight请求的结果能够被缓存多久 |
Java实现举例:
response.setHeader('Access-Control-Allow-Origin','*') //设置所有的请求地址都允许跨域
response.setHeader('Access-Control-Allow-Origin','http//127.0.0.1:5100') //只有127.0.0.1:5100允许跨域
response.setHeader('Access-Control-Allow-Origin-Method','*') //设置所有的请求方法都允许跨域
2.2. CORS漏洞原理
如果网站的CORS策略配置和实施不当,它可引发跨域攻击。常见的CORS配置问题如下:
- Origin校验错误
- 信任null
- HTTPS域信任HTTP域
- 信任自身全部子域
- Origin:* 与 Credentials:true 共用
3. 攻击步骤
- 探索站点是否支持CORS头
- 探索站点对Origin头的校验及绕过方法
- 探索信任子域是否有XSS漏洞
- 构造获取敏感信息的PoC
4. 漏洞防御
CORS漏洞主要是由于配置错误引起的。因此,预防是一个配置问题。以下介绍了针对CORS攻击的一些有效防御措施:
- 正确配置跨域请求:如果web资源包含敏感信息,则应在 Access-Control-Allow-Origin` 标头中正确指定来源。
- 不要将空值列入白名单:避免使用标头 Access-Control-Allow-Origin: null 。来自内部文档和沙盒请求的跨域资源调用可以指定 null 来源。对于私有服务器和公共服务器的可信来源,应该正确定义CORS头。
- 仅允许受信任的站点: Access-Control-Allow-Origin 标头中指定的来源应该仅是受信任的站点。
- 避免在内部网络中使用通配符 * :当内部浏览器可以访问不受信任的外部域时,仅信任网络配置来保护内部资源是不够的。
- CORS不能替代服务器安全策略:攻击者可以直接伪造来自任何可信来源的请求。因此,除了正确配置的CORS外,web服务器还应继续对敏感数据应用保护,如身份验证和会话管理。
热门推荐
优秀教师们的板书设计方法,值得学习
能证明分居的5种证据提供一种可以吗
中年女性为何偏爱车内时光?五个维度解读这一独特现象
浅析秦朝兴衰:论统一后秦吏治败坏的原因及与秦朝速亡之关系
多线程——线程安全的集合类
卫浴花洒注塑-从原材料到成品的生产指南
OpenLDAP统一身份认证系统完整部署指南
如何成为网络安全架构师?
消极情绪:如何识别与管理
《白鹿原》荐读:办法都是人谋出来的,关键是要沉得住气 豆瓣9.3
妈妈,真不是我蠢!初中数学几何早这么学,我也一样考上重点高中
硬核解读:究竟是什么在影响比特币价格?
使用铁锅的好处
基于LLM和金融新闻驱动的强化学习投资组合管理
绵阳梓潼:万亩“红根子” 拓宽致富路
台北好玩的地方学生必访:探索台北文化景点故宫博物院与101观景台
怎么用excel导出课程表
劳动关系、劳务关系、承揽关系:一次讲清楚
精油皮肤管理项目是什么
《游山西村》:陆游笔下的田园诗篇与人生哲思
中风患者降血脂管理最新建议:LDL-C靶目标值和治疗方案全解析
详解秦L与秦Plus差异:这2万花得值吗?
古装剧扬帆出海:优质国产剧与海外受欢迎?这些作品正在走出去
八字预测婚姻时间与状况 婚姻命运解析
中南大学航空航天专业怎么样?就业升学、师资力量全解析
牦牛骨粉有什么功效和作用
Dapr分布式应用运行时初探:核心功能详解
女命偏印偏财和七杀命理解析与影响
浅论李贺诗歌风格与其心境的关系
握力器选购与保养:专业建议与注意事项