CORS跨域漏洞修复

news/2024/11/19 4:36:21/文章来源:https://www.cnblogs.com/fswhq/p/17661396.html

原文链接: https://www.cnblogs.com/wenyoudo/p/14862701.html

漏洞介绍
概述:CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。当该配置不当的时候,就导致资源被恶意操作
潜在危害:中


 

测试方法
1、可以通过浏览器的控制台的network,查看接口的请求包response头中Access-Control-Allow-Origin是否设置为*

2、 也可以通过抓包工具,查看接口返回的response中是Access-Control-Allow-Origin是否设置为*

漏洞案例
1、配置Access-Control-Allow-Origin为 *

 

 

 

 

 

 

2、配置Access-Control-Allow-Origin 但是该值可控

 


 

修复方案

tomcat CORS的配置

使用过滤器进行配置,代码如下:

 

复制代码
package filter;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.http.HTTPException;@WebFilter("/Cors")
public class CorsFilter implements Filter {/*** Default constructor. */public FilterConfig config;public CorsFilter() {// TODO Auto-generated constructor stub}/*** @see Filter#destroy()*/public void destroy() {// TODO Auto-generated method stubthis.config = null;}/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//配置可信域名String[]  authhosts = {"http://www.abc.com:8008","http://www.abcyy.com"};String authost = "";HttpServletRequest httprequest = (HttpServletRequest) request;String origin = httprequest.getHeader("origin"); HttpServletResponse httpresponse  =  (HttpServletResponse) response;if(origin != null &&  !Arrays.asList(authhosts).contains(origin)) {httpresponse.sendError(403);return;}else {for(int i=0;i<authhosts.length;i++) {if(i!=authhosts.length - 1) {authost = authost + authhosts[i]+",";}else {authost = authost + authhosts[i];}}httpresponse.addHeader("Access-Control-Allow-Origin", authost);httpresponse.addHeader("Access-Control-Allow-Methods","GET, POST");httpresponse.addHeader("Access-Control-Allow-Headers","origin, content-type, accept, x-requested-with, sid, mycustom, smuser");chain.doFilter(request, response);}}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO 自动生成的方法存根}
}
复制代码

 

nginx CORS配置

复制代码
ocation / {set $flag 0;if ($http_origin = ''){set $flag "${flag}1";}if ($http_origin !~* ^(http|https)://www\.abc\.com$){set $flag "${flag}1";}if ($flag = "01"){return 403;}if ($http_origin ~* ^(http|https)://www\.abc\.com$) {add_header Access-Control-Allow-Origin $http_origin;add_header Access-Control-Allow-Methods GET,POST;add_header Access-Control-Allow-Credentials true;add_header Access-Control-Allow-Headers DNT,Keep-Alive,User-Agent,If-Modified-Since,Cache-Control,Content-Type;}
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lg-dp1

记忆化搜索:记忆化压缩 DP 状态(一些期望 dp 里会用)剪枝递推:保证前面的部分已经计算了数位 dp 求 \([l,r]\) 之内满足某种限制的数的个数,该限制应该是与数位有关系的。 带不带前导0取决于是否对统计答案造成影响。 前缀和转化:只有上界补充题:如果 lim=1 的时候前面都…

《最新出炉》系列小成篇-Python+Playwright自动化测试-66 - 等待元素至指定状态(出现、移除、显示和隐藏)

1.简介 在我们日常工作中进行UI自动化测试时,保证测试的稳定性至关重要。其中一个关键方面是正确地定位和操作网页中的元素。在网页中,元素可能处于不同的状态,有些可能在页面加载完成之前不在DOM中,需要某些操作后才会出现,而其他元素可能一直存在于DOM中,但最初处于隐藏…

BACnet初学者教程,第三章:什么是 BACnet/IP 网络

第三章:什么是 BACnet/IP 网络平时调试BACnet协议,一个好用的 BACnet 调试工具和模拟器必不可少,推荐一款: 官网地址:https://www.redisant.cn/bacnetexplorerBACnet/IP 网络是一个或多个 IP 子网(IP 域)的集合,这些子网分配有单个 BACnet 网络号。BACnet 互联网络由两…

BACnet初学者教程,第四章:介绍 BACnet 虚拟链路层

第四章:介绍 BACnet 虚拟链路层平时调试BACnet协议,一个好用的 BACnet 调试工具和模拟器必不可少,推荐一款: 官网地址:https://www.redisant.cn/bacnetexplorer虚拟链路层 (VLL) 背后的基本概念是向现有的 BACnet 网络层呈现某些网络拓扑和功能的视图,利用新协议中内置的…

读零信任网络:在不可信网络中构建安全系统12源代码和构建系统

读零信任网络:在不可信网络中构建安全系统12源代码和构建系统1. 建立应用信任 1.1. 软件正在吞噬整个世界 1.2. 零信任网络需要关注应用程序的安全性,这似乎违反直觉,毕竟网络是不可信的,因此可以预见网络上存在不可信的应用 1.3. 运行在数据中心的软件堪称一切魔法之源,因…

雷达气象相关词汇(二 偏振参量)

参考自https://www.radartutorial.eu/15.weather/wr20.en.html 双偏振雷达 使用双偏振是区分冰雹和雨滴的一种方法。雷达发射和接收线性极化电磁波信号,并在水平和垂直偏振之间快速切换,在单个发射脉冲之间或在脉冲组之间交替。现代双偏振雷达通常同时传输两个偏振方向。示意…

第十章 自定义模块

10.1 导入模块 1.什么是python模块? ​ Python模块(Module),是一个Python文件,以.py结尾 模块可以定义函数,类和变量,模块里也能包含可执行的代码 2.模块的作用: ​ python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能 3.模块的导入方式: # 模块在使用…

雷达气象相关词汇(一 扫描模式)

参考自https://www.radartutorial.eu/15.weather/wr20.en.html https://en.wikipedia.org/wiki/Plan_position_indicator PPI(平面位置显示) A plan position indicator (PPI) is a type of radar display that represents the radar antenna in the center of the display, wi…

searchLights 动画

LOGO扫光效果.logo { width: 200px; height: 70px; display: flex; line-height: 70px; position: relative; overflow: hidden } .logo img { width: 100%; height: 70px } \3c p>.logo:before { } \3c br> @-webkit-keyframes searchLights { } \3c br> @-o-keyfram…

JavaWeb后端开发2024-08-08

Maven Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。Maven作用 依赖管理统一的项目结构项目构建仓库安装Maven<mirror> <id>alimaven</id> <name>aliyun maven</name> <u…

Golang语言之gRPC程序设计示例

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.RPC协议介绍1.什么是RPC2.什么是GRPC3.安装gRPC环境3.1 使用gRPC的前提3.2 安装protoc3.3 安装go plugin二.Protocol Buffer的使用指南1.使用Protocol Buffer的基本流程概述2.编写产品服务等proto文件…

迅雷赚钱宝1代刷OpenWRT单网口接在主路由下,内网访问正常,外网无法访问的解决办法。

1. 问题缘由OpenWRT单网口NAS(迅雷赚钱宝1代),接在主路由下面提供NAS服务,配置有基于eth0的DHCPv6Client来获取IPv6公网IP,以实现通过IPv6公网,提供对外的NAS服务。发现在局域网访问DDNS-go的管理界面9876端口正常访问,DDNS-go已允许外网访问,但通过手机数据流量模拟外…