当前位置: 首页 > news >正文

前端漏洞(上)- CORS漏洞

漏洞复现目的:熟悉 CORS 漏洞 原理

漏洞介绍:

CORS(跨源资源共享)漏洞是一种安全漏洞,它允许未经授权的网站访问或操纵另一个网站上的数据。CORS是Web开发中用于控制跨域资源共享行为的安全机制。当一个网站(称为源)需要与另一个源上的资源进行交互时,CORS机制确保这种交互是安全的。如果配置不当,攻击者可以利用CORS策略的漏洞来绕过同源策略的限制,执行非法操作,比如窃取数据、执行恶意脚本等。

CORS漏洞的工作原理

同源策略(Same-Origin Policy):

同源策略是一种重要的安全措施,它限制了网页中的脚本如何与来自不同源的文档进行交互。一个源由协议(例如HTTP或HTTPS)、域名和端口号组成。如果两个URL的协议、域名和端口都相同,则它们被认为是同源的。


CORS机制:

当浏览器尝试从一个源加载资源时,它会检查目标资源的服务器是否允许该请求。这是通过在HTTP响应头中设置Access-Control-Allow-Origin来实现的。例如,如果服务器设置为Access-Control-Allow-Origin: *,则表示允许来自任何源的请求。

CORS漏洞:

如果服务器配置错误,如将Access-Control-Allow-Origin设置为*(允许所有域)而没有其他安全措施(如验证请求的来源),或者使用了不恰当的通配符模式,例如https://*.example.com而没有精确匹配具体的子域,攻击者可以通过构造特定的请求来绕过这些限制,进而访问或篡改数据。

请求方式

CORS定义了两种跨域请求:简单请求非简单请求。简单跨域请求就是使用设定的请求方式请求数据,而非简单跨域请求则是在使用设定的请求方式请求数据之前,先发送一个OPTIONS预检请求,验证请求源是否为服务端允许源。只有"预检"通过后才会再发送一次请求用于数据传输。

搭建环境:docker 环境

命令:yml 文件目录下 执行 docker-compose up -d 直接拉取镜像

环境说明:

该环境主要用来演示CORS跨域获取数据,分为两个web系统,第一个端口8971模拟一个站点,该站点存在用户敏感信息。第二个端口8972模拟攻击者自建的系统, 演示为通过8972端口对应的站点利用CORS漏洞读取8971站点的用户信息。

1、CORS漏洞的工作原理图:

简单请求:

非简单请求:

2、实战操作
访问页面:http://127.0.0.1:8971/web/cors.php  可以看到有用户名和密码的隐私页面。此时F12观察响应头可以看到添加了Access-CVontrol-Allow-Origin:*。正是由于添加了该响应头,允许了攻击者跨域读取该页面中的敏感数据。

3、访问 http://127.0.0.1:8972/cors_read.html ,可以发现跨域读取数据成功。

4、漏洞防御

对服务器进行合理配置, 仅对需要的页面开启CORS功能。开启时尽量指定域名清单,避免使用 * 等通配符配置向所有域名开放。

http://www.dtcms.com/a/352024.html

相关文章:

  • 静态HTML网页模板设计与实现
  • python基础-面向对象编程(OOP)
  • 我们来学mysql -- safe启动
  • Mysql——日志
  • 【45页PPT】制造行业数据资产运营平台需求方案(附下载方式)
  • 【科研绘图系列】R语言在海洋生态学中的应用:浮游植物糖类组成与溶解性有机碳的关系
  • OpenCV打开视频函数VideoCapture使用详解
  • Linux桌面主题的安装
  • 33.ansible 比较重要的配置文件
  • 运算符(2)
  • 审核问题——鸿蒙审核返回安装失败,可以尝试云调试
  • timedatectl查看时间同步
  • Windows本地部署大模型方式对比
  • 约束满足问题(CSP)--搜索算法在实际场景中的应用
  • 深度学习篇---LeNet-5
  • 国产银河麒麟SP1桌面系统如何免密登录系统
  • Rust:函数与控制流
  • MATLAB在生态环境数据处理与分析中的应用
  • 基于MATLAB的雷达系统设计中的信号处理程序
  • Java:Docx4j类库简介及使用
  • 在 Vue 中嵌入 Unity WebGL 并实现双向通信
  • 有 100W 个数,有一个函数是可以高效查找并删除某个数,问应该用什么数据结构去存这 100W 个数
  • 文献阅读笔记【雷达信号分选】:基于机器学习的雷达信号分选方法综述
  • 在python 代码中调用rust 源码库操作步骤
  • Excel跨sheet检索提取信息
  • 最简洁yolov8 C++配置教程
  • Leetcode+Java+dpI
  • 汇智焕彩,聚势创新 - openKylin 2.0 SP2正式发布!
  • 企业云办公安全指南:如何构建高效无忧的云办公环境?
  • 在Godot中为您的游戏添加并控制游戏角色的完整技术指南