CORS - Origin header

admin 2024年4月17日19:48:40评论3 views字数 2635阅读8分47秒阅读模式

CORS - Origin header

Origin - HTTP | MDN (mozilla.org)

OPTIONS - HTTP | MDN (mozilla.org)

跨源资源共享(CORS) - HTTP | MDN (mozilla.org)

example web: https://www.office.com/

Pentest里面的case中,有一个项,一般都是直接scan了,一直没有常看。

直到有一天,同事问了一下,重新看看。

CORS(跨源资源共享)是一种 Web 应用程序中的安全机制,用于限制浏览器在跨域请求资源时的访问权限。CORS 攻击指的是对跨域资源共享机制的滥用,攻击者利用跨域资源共享的规则来获取或窃取用户的敏感信息。

CORS 攻击的原理是,当一个网站允许来自其他域的请求访问某些资源时,攻击者可以伪造一个请求,通过浏览器发送给目标网站。由于浏览器的同源策略(同源策略限制了不同源之间的交互),默认情况下只有同源的网站才能访问资源,但是通过 CORS 设置,目标网站允许来自其他源的请求访问特定资源。

攻击者可以构造特定的请求,欺骗目标网站的浏览器,使其发送跨域请求,从而获取到需要的敏感信息,例如用户的身份认证令牌、Cookie 等。

为了防止 CORS 攻击,开发者应该正确配置 CORS 响应头,限制跨域请求的权限。常见的防护措施包括:

  1. 1. 仅允许特定的来源访问资源(通过设置 Access-Control-Allow-Origin 响应头)。

  2. 2. 对敏感操作(如修改、删除数据)进行身份验证和授权。

  3. 3. 使用 CSRF(跨站请求伪造)防护措施,比如在请求中添加 CSRF token。

此外,开发者应该遵循安全最佳实践,如验证用户输入、过滤和转义用户数据,以防止其他类型的攻击,如 XSS(跨站脚本攻击)和 SQL 注入。

检查项目

  1. 1. Access-Control-Allow-Origin (涉及跨域时需要设置,关联 Request 中的 Origin 参数)

检查项内容

  1. 1. 与Access-Control-Allow-Credentials: true一同使用时

  2. 2. 不可设置为*

  3. 3. 需要将域名信任范围精确到完整子域名

  4. 4. 仅限https header

测试的话,很简单,对比一下就行了。改动一下请求中的 Origin header,看response。

CORS - Origin header

image-20240415165038107

修改Origin header

CORS - Origin header

image-20240415165016821

这个子域名的匹配,别改成白名单或者子域名里面的就行。例如:

CORS - Origin header

image-20240415165413817

一般是用正则或者白名单进行限制的。

微软的例子很好,在请求正确的前提下,有两个关键字header。

  • • Access-Control-Request-Method - 告知服务器,实际请求将使用的方法(例如POST/GET 等等)

  • • Access-Control-Request-Headers - 告知服务器,实际请求将携带的自定义请求首部字段

这个请求,其实并不适用于api server,前后端分离,后端api server这种情况。因为它不涉及浏览器加载的问题。后续说。

Access-Control-Request-Method是一个很有用的提示,他可能提示一个api用什么方法,比如put请求啊,delete请求啊,等等,会有惊喜。

Option 与 Origin header

HTTP OPTIONS 方法请求给定的 URL 或服务器的允许通信选项。

在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。

OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.example
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: https://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type

服务器可以回应是否会接受这些情况下的请求。

这个就很有意思了。刚开始是真不知道这个鬼东西有啥用?哈哈哈,在拦截里面并没有限制请求,或者后续API也能够直接发送并不影响,那么具体的用处是什么,失败了会怎么样?

刷新网页,拦截请求修改一下相关的header 神奇的发现拦截get等其他类型请求的时候,网页是可以正常加载的,但是修改Option请求的话

直接控制台报错了。

CORS - Origin header

image-20240416111446585
Access to XMLHttpRequest at 'https://browser.events.data.microsoft.com/OneCollector/1.0/?cors=true&content-type=application/x-json-stream&w=2'from origin 'https://www.office.com' has been blocked by CORS policy:Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'https://www.wulala.com' that is not equal to the supplied origin.

阻止了请求。header不匹配。

也就是说这是浏览器的安全行为。为了安全性的一种策略。在一定程度上,从用户浏览器上进行防护,阻止了跨站请求伪造攻击(CSRF)和跨源脚本攻击(XSS)等安全威胁。通过限制在浏览器中发起跨域请求的能力,CORS确保只有经过授权的源才能访问特定资源,从而防止恶意网站利用用户身份或执行未经授权的操作。这样可以提高Web应用程序的安全性,保护用户的个人信息和敏感数据。

原文始发于微信公众号(wulala520):CORS - Origin header

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月17日19:48:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CORS - Origin headerhttps://cn-sec.com/archives/2665085.html

发表评论

匿名网友 填写信息