安全漏洞修复帖

news2024/9/25 9:34:40

对于项目漏洞都是一堆又不重要又很重要的事情

  • 一、修复HTTP 响应头缺失
    • Nginx
    • Tomcat
  • 响应头:值
  • 二、会话 Cookie 中缺少 secure 属性
  • 三、Html form 表单没有 CSRF 防护
    • Security的示例
    • Shiro的示例
  • 四、Host 头攻击
    • Nginx
    • Tomcat
    • Apache
  • 五、开启 options 方法

一、修复HTTP 响应头缺失

Nginx

nginx.conf配置文件中location / {
	add_header 响应头 值;
}

Tomcat

Security认证:
在这里插入图片描述
Filter:
在这里插入图片描述

响应头:值

  1. X-Frame-Options SAMEORIGIN;
    SAMEORIGIN 表示该页面可以在相同域名页面的frame中展示

  2. X-Content-Type-Options: nosniff;
    禁止服务器自动解析资源类型

  3. X-XSS-Protection “1; mode=block”;
    mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换

  4. Content-Security-Policy “default-src *;style-src ‘self’ ‘unsafe-inline’;script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’;img-src * data:;worker-src * blob:;font-src ‘self’ data:;”;
    default-src 定义针对所有类型资源的默认加载策略,
    self 允许加载相同源的内容

  5. Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;
    其可选的值有: max-age=SECONDS,表示本次命令在未来的生效时间 includeSubDomains,可以用来指定是否对子域名生效 漏洞危害

  6. X-Permitted-Cross-Domain-Policies none;
    none:不设置

  7. X-Download-Options: noopen;
    noopen:用于指定IE 8以上版本的用户不打开文件而直接保存文件。在下载对话框中不显示“打开”选项。

  8. Referrer-Policy “no-referrer”;不允许被记录

二、会话 Cookie 中缺少 secure 属性

在这里插入图片描述

三、Html form 表单没有 CSRF 防护

Security的示例

演示如何添加CSRF防护
1、在Spring Boot中验证CSRF token
在Spring Boot中,可以使用CsrfToken接口来获取和验证CSRF token。下面是一个基于Spring MVC的控制器示例,演示如何获取和验证CSRF token:

@Controller
public class MyController {

    @Autowired
    private CsrfTokenRepository csrfTokenRepository;

    @GetMapping("/")
    public String index(Model model, HttpServletRequest request) {
        CsrfToken csrfToken = csrfTokenRepository.generateToken(request);
        model.addAttribute("_csrf", csrfToken);
        return "index";
    }

    @PostMapping("/submit")
    public String submit(@RequestParam("_csrf") CsrfToken csrfToken, Model model) {
        if (csrfToken == null) {
            throw new IllegalArgumentException("Missing CSRF token");
        }
        // 验证CSRF token是否正确
        boolean valid = csrfTokenRepository.loadToken(request)
            .map(t -> t.equals(csrfToken))
            .orElse(false);
        if (!valid) {
            throw new IllegalArgumentException("Invalid CSRF token");
        }
        // 处理表单提交
        return "result";
    }
}

2、在表单中添加CSRF token
在表单中添加一个隐藏的input标签,包含一个生成的CSRF token:

<form action="/submit" method="post">
  <input type="hidden" name="_csrf" value="${_csrf.token}" />
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" />
  <button type="submit">Submit</button>
</form>

3、在Spring Boot中配置CSRF防护
在Spring Boot中配置CSRF防护需要使用CsrfTokenRepository接口来生成和存储CSRF token。在Spring Boot中,默认情况下,CsrfTokenRepository会将CSRF token存储在session中,可以使用HttpSessionCsrfTokenRepository类来配置。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    }
}

Shiro的示例

当使用Shiro作为安全框架时,可以采取以下步骤来添加CSRF防护:
1、在Shiro中启用CSRF防护
在Shiro中启用CSRF防护需要在Shiro的配置文件中添加以下内容:

<bean id="csrfTokenManager" class="org.apache.shiro.web.csrf.CsrfTokenManager"/>

上面的配置会创建一个CsrfTokenManager实例,该实例负责生成和验证CSRF token。

2、在表单中添加CSRF token
在表单中添加一个隐藏的input标签,包含一个生成的CSRF token:

<form action="/submit" method="post">
  <input type="hidden" name="_csrf" value="${csrfTokenManager.token}" />
  <label for="name">Name:</label>
  <input type="text" id="name" name="name" />
  <button type="submit">Submit</button>
</form>

在上面的示例中,使用${csrfTokenManager.token}表达式从CsrfTokenManager获取CSRF token,并将其添加到表单中。

3、在Shiro中验证CSRF token
在Shiro中,可以使用CsrfTokenManager来获取和验证CSRF token。下面是一个基于Shiro的控制器示例,演示如何获取和验证CSRF token:

@Controller
public class MyController {

    @Autowired
    private CsrfTokenManager csrfTokenManager;

    @GetMapping("/")
    public String index(Model model) {
        CsrfToken csrfToken = csrfTokenManager.getToken();
        model.addAttribute("csrfTokenManager", csrfTokenManager);
        return "index";
    }

    @PostMapping("/submit")
    public String submit(@RequestParam("_csrf") String csrfToken, Model model) {
        if (csrfToken == null) {
            throw new IllegalArgumentException("Missing CSRF token");
        }
        // 验证CSRF token是否正确
        boolean valid = csrfTokenManager.isValid(csrfToken);
        if (!valid) {
            throw new IllegalArgumentException("Invalid CSRF token");
        }
        // 处理表单提交
        return "result";
    }
}

四、Host 头攻击

Nginx

修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。值可为IP或域名

Tomcat

修改server.xml文件,配置Host的name属性,值可为IP或域名

Apache

修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项。

五、开启 options 方法

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式】适配器模式和桥接模式

适配器模式 适配器模式 : 就是将一个类的接口变成客户端所期望的另一种接口&#xff0c;使得原本因为接口不匹配而无法一起工作的接口可以正常工作。属于结构型模式 比方说我有一个A牌子的奶瓶&#xff0c;然后买了个B牌子的奶嘴&#xff0c;不能匹配怎么办? 再买一个转换器…

Python3-输入和输出

Python3 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法&#xff0c;标准输出文件可以用 sys.stdout 引用。 如果你希望输出的形式更加多样&#xff0c;可以使用 str.format() 函数来格式化输出值。…

2020蓝桥杯真题洁净数 C语言/C++

题目描述 小明非常不喜欢数字 2&#xff0c;包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2&#xff0c;小明将它称为洁净数。 请问在整数 1 至 n 中&#xff0c;洁净数有多少个&#xff1f; 输入描述 输入的第一行包含一个整数 n(1≤n≤10^6)。 输出描述 输…

VS Code 解决 SpringBoot 项目启动时报 Failed to refresh live data from process **** 的问题

问题 SpringBoot 启动后 &#xff0c;VS Code 报错 Failed to refresh live data from process ****。 现场是&#xff0c;SpringBoot 项目启动时&#xff0c;VS Code 将进行如下刷新&#xff0c;图片如下所示 当刷新 10 次以后&#xff0c;如果还是失败&#xff0c;则会抛出…

C++ queue的以及优先级队列(堆)的介绍和使用

因为队列与之前学习的栈等使用方法比较类似&#xff0c;所以对此进行简单介绍1 queue的介绍1. 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。2. 队列作为容器适配器实现&#xff0c;容…

基于RK3588人工智能大算力5网口工业交换机

RK3588是瑞芯微旗下最新的8K旗舰SoC芯片&#xff0c;采用ARM架构&#xff0c;主要用于PC、个人移动互联网设备、边缘计算和其他数字多媒体应用。RK3588集成了四核Cortex-A76和四核Cortex-A55&#xff0c;以及单独的NEON协处理器&#xff0c;支持8K视频编解码。许多功能强大的嵌…

肠道菌群与健康:探究发酵食品、饮食方式、益生菌和后生元的影响

谷禾健康 肠道微生物群之间编织了一个复杂的相互作用网络&#xff0c;影响人体的营养吸收和代谢&#xff0c;免疫功能等&#xff0c;对我们的健康状态有很大的影响。 我们知道&#xff0c;肠道微生物群具有多样性&#xff0c;平衡性&#xff0c;稳定性等特征&#xff0c;但同时…

c语言面试题目整理

1、static有什么用途&#xff1f; 在C语言中&#xff0c;static主要定义全局静态变量&#xff0c;定义局部静态变量&#xff0c;定义静态函数 限制变量的作用域&#xff0c;设置变量的存储域。 static 关键字主要有两种作用&#xff1a; 第一&#xff0c;为某特定数据类型或对…

05 C语言数据类型

05 C语言数据类型 1、数据类型 编程语言对数据类型分为两派&#xff1a;一种认为要注重&#xff0c;一种认为可以忽视。 C语言类型 1、整数 : char < short < int < long < long long &#xff0c;bool 2、浮点数&#xff1a;float < double < long doub…

ChatGPT狂飙,文心一言会是李彦宏的“奇兵”吗?

“这是搜索领域新的一天。”前不久&#xff0c;微软CEO纳德拉在新版搜索引擎Bing的发布仪式上如此表示。Bing的技术支持&#xff0c;正是来自最近火遍全球的AI聊天机器人ChatGPT。仅仅两个月&#xff0c;OpenAI公司旗下的ChatGPT月活就超过1亿&#xff0c;成为史上增长最快的消…

Idea springboot springCloud热加载热调试常用的两种方式

场景描述 在项目开发的过程中&#xff0c;需要修改调试的时候偶每次都需要重启项目浪费时间&#xff0c;下面是我整理的两种常用的两种方式方式一 修改启动配置方式&#xff08;主要针对debug模式下&#xff09; 点击启动配置》edit configrations… configration下面修改Upd…

Win11+VS2019编译PCL1.12含gpu过程记录

之前直接用AllinOne安装了配置了一个pcl但是没有CUDA的支持&#xff0c;跑的速度很慢&#xff0c;现在想要集成到GPU上&#xff0c;需要重新编译一下PCL&#xff0c;之前自己编译一直有问题&#xff0c;而且还自己单独编译了相关的依赖库&#xff0c;结果发现只需要用AllinOne里…

《C++ Primer Plus》(第6版)第9章编程练习

《C Primer Plus》&#xff08;第6版&#xff09;第9章编程练习《C Primer Plus》&#xff08;第6版&#xff09;第9章编程练习1. 打印字符串2. 修改程序清单9.93. chaff4. sales《C Primer Plus》&#xff08;第6版&#xff09;第9章编程练习 1. 打印字符串 下面是一个头文件…

开源工具系列5:DependencyCheck

Dependency-Check 是 OWASP&#xff08;Open Web Application Security Project&#xff09;的一个实用开源程序&#xff0c;用于识别项目依赖项并检查是否存在任何已知的&#xff0c;公开披露的漏洞。 DependencyCheck 是什么 Dependency-Check 是 OWASP&#xff08;Open Web …

宿主机连接virtualbox中网络

背景&#xff1a;宿主机ubuntu&#xff0c;virtualbox中window中有VPN需要在宿主机也能共享到VPN网络。在virtualbox中添加host-only网络&#xff0c;取名vboxnet0这里在菜单栏中: 管理 -> 工具 -> network managervboxnet0在宿主的IP为192.168.56.1宿主机上运行ifconfig…

【Copula】基于二元Frank-Copula函数的风光出力场景生成方法【考虑风光出力的不确定性和相关性】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JavaEE简单示例——依赖注入

简单介绍&#xff1a; 首先我们要知道&#xff0c;依赖注入就是赋值&#xff0c;带着这句话去理解依赖注入就非常的简单了&#xff0c;将文中所有的依赖注入全部脑部替换成给属性赋值&#xff0c;再去理解依赖注入的概念。 依赖注入&#xff08;DI&#xff09;是指IoC容器在运…

混淆矩阵的生成

混淆矩阵简介 混淆矩阵&#xff08;Confusion Matrix&#xff09;是一个二维表格&#xff0c;常用于评价分类模型的性能。在混淆矩阵中&#xff0c;每一列代表了预测值&#xff0c;每一行代表了真实值。因此&#xff0c;混淆矩阵中的每一个元素表示了一个样本被预测为某一类别…

Zabbix对接Prometheus实操——基于Prometheus pattern监控

概述 得益于对云原生和容器监控的友好支持&#xff0c;如今&#xff0c;Prometheus监控受到越来越多企业的青睐。然而&#xff0c;对于已经部署了Zabbix监控系统的企业&#xff0c;想要用Prometheus完全替换Zabbbix&#xff0c;可能既无必要&#xff0c;短期也不现实。实际上&…

Vue组件原理知识(1)

Vue 组件知识整理&#xff08;1&#xff09;文章目录Vue 组件知识整理&#xff08;1&#xff09;一、组件介绍1.1 传统方式与组件方式编写应用对比二、组件使用2.1 非单文件组件的使用**1. 组件的创建****2. 组件的注册****3. 组件的使用****4. Vue中使用组件的三大步骤总结***…