修复cors跨域资源共享漏洞

news/2024/7/24 2:16:43

CORS介绍

浏览器出于安全的考虑,使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略,否则就是跨域的HTTP请求,默认情况下是被禁止的

,即JavaScript或Cookie只能访问同源(相同协议,相同域名,相同端口)下的内容。但由于跨域访问资源需要,出现了CORS机制,这种机制让web服务器能跨站访问控制,使跨站数据传输更安全。CORS需要阅览器和服务器同时支持,目前,主流的阅览器都支持cors。

漏洞验证

首先使用burpsuite抓包对http请求添加Origin: http://www.attacker.com进行测试:

1 如果返回头是以下情况,那么就是高危漏洞,这种情况下漏洞最好利用:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

2 如果返回头是以下情况,那么也可以认为是高危漏洞,只是利用起来麻烦一些:

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

3 如果返回以下,则不存在漏洞,因为Null必须是小写才存在漏洞:

Access-Control-Allow-Origin: Null

Access-Control-Allow-Credentials: true

4 如果返回以下,可认为不存在漏洞,因为CORS安全机制阻止了这种情况下的漏洞利用,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

5 如果返回以下,可认为不存在漏洞,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

修复建议

1. Access-Control-Allow-Origin中指定的来源只能是受信任的站点,避免使用Access-Control-Allow-Origin: *,避免使用Access-Control-Allow-Origin: null,否则攻击者可以伪造来源请求实现跨域资源窃取。

2. 严格校验“Origin”值,校验的正则表达式一定要编写完善,避免出现绕过的情况。

3. 减少“Access-Control-Allow-Methods”所允许的请求方法。

4. 除了正确配置CORS之外,Web服务器还应继续对敏感数据进行保护,例如身份验证和会话管理等。

Nginx建议配置(http://www.hao123.com替换为受信任站点,需要排查好哪些外部域名会访问本域名)

location / {

add_header Access-Control-Allow-Origin http://www.hao123.com;

add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";

add_header Access-Control-Allow-Methods "GET, POST, HEAD,OPTIONS";

}

location / {
  add_header Access-Control-Allow-Origin http://www.hao123.com;
  add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
  add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
}

location ~ /myurl(.*) {
  if ( $http_origin ~ '^http(s)?://(localhost|10\.130\.222\.222):6500$' ){
  add_header Access-Control-Allow-Origin $http_origin;
  }
  if ( $http_origin ~ '^http(s)?://(localhost|10\.130\.222\.223):6500$' ){
  add_header Access-Control-Allow-Origin $http_origin;
  }
  
  add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
  add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
}


http://www.niftyadmin.cn/n/428385.html

相关文章

ASP.NET教育报表管理系统-权限管理模块(源代码+论文)

随着教育改革的不断深化,建立一套能够适应这些改变的教育报表管理 系统也就显得尤为重要。教育报表管理系统是根据某教育局的实际需求进行设计开发的,该报表系统主要记录了教育局其管辖范围内所有教学单位内教育情况的数据,并可进行汇总。 本论文设计采用B/S模式,利用VS20…

企业内网802.1X和Portal网络接入认证方案

随着互联网和移动化办公的飞速发展,越来越多的公司开始向数字化转型。越来越多的终端设备接入企业内部网络,并且接入方式也丰富多样,从有线网络到无线WiFi网络到VPN接入、SD-WAN等,公司内部网络的拓扑结构不断复杂化,网…

【项目】接入飞书平台

前言 项目有和飞书打通的需求,因为是第一次打通,摸索过程还是花了些时间的,现在相关笔记分享给大家。 步骤 1、熟悉开发文档 熟悉飞书的开发文档:开发文档 ,找到你需要的接口,拿我为例,我需…

2023!我的大二下学期总结

文章目录 学业方面JavaPHP原型设计前端 生活方面总结一下 这半年压力太大了,简直是我十几年来压力最大的半年。 学业方面 Java 这学期首先补了补Java基础。Java是目前最流行的语言之一,打好基础能让我能更好地使用Java。最后通过制作一个拼图小游戏&am…

chatgpt赋能python:Python中的延迟:如何暂停程序执行?

Python中的延迟:如何暂停程序执行? 如果你在编写Python程序时需要实现延迟效果,比如等待某些条件满足后再进行下一步操作,那么你可能需要使用Python提供的延迟功能。这篇文章将介绍Python中的延迟实现方法,并提供几个…

AcWing 4908. 饥饿的牛

贝茜是一头饥饿的牛。 每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。 初始时,牛棚中没有干草。 为了让贝茜不被饿死,农夫约翰制定了 N个给贝茜送干草的计划。 其中第 i个计划是在第 di 天的白天给贝茜送去 bi 捆…

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 解决方案之一

RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 解决方案之一 问题解决方案结论 问题 运行Torch代码时,遇到错误RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( handle, opa, opb, m, n, k, &alpha…

Vue中如何进行移动端适配与响应式布局?

Vue中如何进行移动端适配与响应式布局? 如今,移动端适配与响应式布局已经成为Web开发中不可或缺的一部分。Vue.js作为一款流行的JavaScript框架,也提供了许多有用的工具和技术来实现移动端适配和响应式布局。在这篇文章中,我们将…