大聪明教你学Java | Spring Boot 项目设置 X-Content-Type-Options 响应头

2023-05-16

前言

我们在开发应用系统的时候,总会遇到各种各样的漏洞,即便是项目上线后,甲方霸霸也会找专门搞安全的公司来对我们的应用系统进行扫描,扫描完后或多或少也会出现一些漏洞,我们就得加班对这些漏洞进行修复…

大聪明开发的应用系统已经上线三年了,然而就在昨天依然被扫描出了一个漏洞 —— 远程 Web 系统应用程序不采取措施来减轻一类 Web 应用程序漏洞,说白了就是远程网络应用程序不设置 X-Content-Type 响应头。刚看到扫描报告的时候还真有点麻爪,不知道如何下手,最后经过一番努力还是成功的修复了这个漏洞✌,那么借此机会,大聪明就和大家分享一下如何修复此类漏洞😊。

漏洞修复

漏洞简介

首先我们先简单说说 Content-Type 响应头有什么用👇

互联网上的资源类型有很多种,通常浏览器会根据响应头的 Content-Type 字段来分辨这些资源的类型。比如 “text/html” 代表的是 html 类型的文件, “image/png” 则代表的是 png 图片,“text/css” 则是 css 样式文件。然而有些资源的 Content-Type 字段是错的或者未定义。此时某些浏览器就会启用 MIME-sniffing 来猜测该资源的类型(但是猜测的并不一定准确),猜测后再解析该文件的内容并开始执行。如果此时我们给一个 html 文件指定 Content-Type 为 “text/plain” ,那么在某些浏览器中这个文档依然会被当做 html 文件来解析。因为某些浏览器存在这个特性,攻击者就利用这一特行让原本应该解析为图片的请求被解析为 JavaScript 代码,从而实现一些不可告人的目的🈲。为了防止应用系统被攻击,我们就需要将应用系统的页面都设置上响应头 —— X-Content-Type-Options:nosniff。

说完 Content-Type 响应头,可能有一些小伙伴会想到另外两个响应头—— X-Frame-Options 和 X-XSS-Protection,那么我们这里也简单的说几句👇

  1. X-Frame-Options 响应头:为了减少点击劫持(Clickjacking)而引入的 X-Frame-Options 响应头,这个响应头支持三种配置:① DENY(不允许被任何页面嵌入);② SAMEORIGIN(不允许被本域以外的页面嵌入);③ ALLOW-FROM URL(不允许被指定的域名以外的页面嵌入)。
  2. X-XSS-Protection响应头:该响应头的作用是防范 XSS 攻击,现在主流浏览器都支持该响应头,并且都默认开启了 XSS 保护,该响应头也是有三种配置:① 0(禁用XSS保护);② 1(启用XSS保护);③ 1;mode=block(启用XSS保护,并在检查到XSS攻击时,停止渲染页面)。不过有一点是需要注意的,虽然浏览器提供的防止 XSS 攻击保护机制并不完美,但是开启后仍然可以给予一定的防护能力,所以没有特殊的情况,我们一定不要关闭该响应头。

漏洞修复方法

修复此类漏洞的方式也很简单,下面就针对两种常见情况和大家分享一下修复此类漏洞的方法~

情况一:应用系统部署在 Tomcat 下

如果我们的应用系统部署在了 Tomcat 下,那么我们只需要在 Tomcat 下的 web.xml 配置文件中增加几行配置即可(文件路径:Tomcat 根目录/conf/web.xml)👇

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>SAMEORIGIN</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

如果我们使用的是低版本的 Tomcat ,有可能会找不到 org.apache.catalina.filters.HttpHeaderSecurityFilter 相关的 jar 包,此时我们可以去高版本的 Tomcat 中将对应的 HttpHeaderSecurityFilter 文件复制到低版本的 Tomcat 中。配置成功后我们需要重启 Tomcat 服务,增加的配置才会生效。如下图所示👇

在这里插入图片描述

情况二:Spring Boot 项目生成的 Jar 包(Tomcat 集成在 Jar 包中)

如果我们使用 Spring Boot 开发应用系统,很多小伙伴都会选择将项目打成 Jar 包来进行部署,此时我们就没办法通过修改 Tomcat 下的 web.xml 配置文件来修复此类漏洞了(毕竟 Spring Boot 帮我们把 Tomcat 集成在项目中了,想找 web.xml 配置文件都找不到😂)。针对此类情况,我们就可以使用过滤器来解决问题👇

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

/**
 * 使用过滤器增加响应头(以 X-Content-Type-Options:nosniff 为例)
 * @description: AddResponseHeaderFilter 
 * @author: 庄霸.liziye
 * @create: 2022-03-03 15:21
 **/
@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {
 
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
        FilterChain filterChain) throws ServletException, IOException {
        httpServletResponse.addHeader("X-Content-Type-Options", "nosniff");
        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }
}

过滤器增加后,我们重启一下项目看看效果👇

在这里插入图片描述
解决此类漏洞方式是不是跟简单 (●’◡’●) ,通过这么几行代码就能让我们的应用系统的安全性提升一大截✌~

小结

本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇‍

希望各位小伙伴动动自己可爱的小手,来一波点赞+关注 (✿◡‿◡) 让更多小伙伴看到这篇文章~ 蟹蟹呦(●’◡’●)

如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。

你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大聪明教你学Java | Spring Boot 项目设置 X-Content-Type-Options 响应头 的相关文章

  • Anaconda 控制台输入命令出现‘拒绝访问‘解决方案.

    控制台输入命令出现 39 拒绝访问 39 解决方案 问题描述解决方案 问题描述 我们安装完成Anaconda后希望控制和添加一些环境 通常我们可以使用conda install XXX 命令来进行 但有些却不能很好的安装 当我们使用pip
  • (一)ProxmoxVE 初识

    前不久 xff0c 因项目需要接触了ProxmoxVE虚拟化技术 xff0c 在此针对重点以及技术选型进行一个简单的理论层面总结 xff1a ProxmoxVE基本特点 xff1a 1 ProxmoxVE虚拟机是使用kvm xff0c 容器
  • 传输网基础知识

    光传输的发展史 PDH SDH MSTP PTN OTN PDH xff1a Plesiochronous Digital Hierarchy xff0c 准同步数字系列 SDH xff08 Synchronous Digital Hier
  • PyCharm配置SFTP远程调试Django应用

    背景 之前一直从事Java方面的应用开发 xff0c 由于组里Python方向人手紧缺 xff0c 转而接触了几月Python xff0c 进行Django应用的学习和开发 对于用惯了Eclipse如此强大的IDE xff0c Python
  • 萌新PC网络故障如何排除障碍

    1 首先是排除接触故障 xff0c 即确保你的网线是可以正常使用的 然后禁用网卡后再启用 xff0c 排除偶然故障 打开网络和共享中心窗口 xff0c 单击窗口左上侧 更改适配器设置 右击其中的 本地连接 或 无线网络连接 xff0c 单击
  • 51单片机定时器的计数初值

    设定时时间为 5ms xff08 即5000us xff09 xff0c 定时器计数初值为 X xff0c 晶振频率为11 0592MHz xff0c 又 xff0c 定时时间 61 xff08 2 16 X xff09 12 晶振频率 x
  • mybatis-plus分页踩坑

    踩坑情况 引入的mybatis plus框架 用他的IPage分页接口去查询的时候发现接收到的数据并没有按照预料的去分页 也没执行count数量的sql 分析原因 后来去官网找发现是需要有一个分页插件的配置 代码如下 span class
  • Visual Studio 报错:error LNK2019: 无法解析的外部符号

    遇到的完整报错是这样的 xff1a error LNK2019 无法解析的外部符号 34 public thiscall Person Person void 34 0Person 64 64 QAE 64 XZ xff0c 函数 34 p
  • QT基础:QButtonGroup 按钮组的简单演示

    QButtonGroup 是一个按钮组 xff0c 就是将控件进行组合或分组的一个容器 xff0c 但是它并不在设计师里面可以直接拉出来用 在使用 QButtonGroup 的时候需要引入一下 include lt QButtonGroup
  • QT基础:遍历QListWidget,及QListWidget简单演示,适合初学者食用

    QListWidget 是一个列表框 xff0c 关于它的详细介绍可以参考 xff1a Qt QListWidget详解 初学者如果只是想在短时间内了解 QListWidget 的话 xff0c 可以参考这里 1 打开QT xff0c 创建
  • 查看虚拟机操作系统版本

    看虚拟机操作系统版本 xff0c 可以按照以下步骤进行 xff1a 打开虚拟机并登录到操作系统 打开终端 xff0c 输入以下命令 xff1a lsb release a 这个命令会显示操作系统的版本信息 xff0c 包括发行版名称 版本号
  • 汇编语言及其常用指令 3分钟急速了解

    第一部分 xff1a 汇编语言简介 当今计算机科学的领域中 xff0c 汇编语言是一门非常重要的编程语言 汇编语言是一种低级别的语言 xff0c 它直接操作计算机的硬件 xff0c 因此它比高级编程语言更加快速和高效 在本篇文章中 xff0
  • QT Creator实现导出某数据库的某表格,导出的时候将表头写成中文

    具体实现功能 xff1a 实现将某数据库内的某表格 xff0c 导出为execl可以打开的表格文件 xff0c 一般后缀为 xls xff0c 我这里是在Ubuntu环境下演示的 xff0c Windows环境应该也OK 要实现这个功能 x
  • 文献笔记|知识追踪|GKT|Graph-based Knowledge Tracing: Modeling Student Proficiency Using Graph Neural Network

    文章目录 Graph based Knowledge Tracing Modeling Student Proficiency Using Graph Neural Network研究对象面临的问题难点作者的方法FrameworkGKT问题
  • gRPC, Thrift和Dubbo等3种RPC框架的比较

    gRPC是Google开源的一款RPC框架 xff08 Go版本的实现 xff09 xff0c 以protobuf作为IDL xff0c 通过protoc来编译框架代码 gRPC的Java实现的底层网络库是基于Netty开发而来 xff0c
  • 搭建GitLab服务器

    下载 1 点击下载GitLab的rpm文件 2 或者命令下载 xff08 比较慢 xff0c 建议使用第一种方法直接下载 xff09 span class token function wget span https link zhihu
  • 求出a、b、c、d、e,满足ab-cd+e=1方程

    编写一个实验程序 xff0c 求出a b c d e xff0c 满足ab cd 43 e 61 1方程 xff0c 其中所有变量的取值为1 5并且均不相同 分析 xff1a 采用回溯法 xff0c 以找到变量的个数为终结条件 xff0c
  • idea插件 spring-assistant-@valuetoyml,快速定位到yml配置文件

    这里写自定义目录标题 idea插件 spring assistant 64 valuetoyml xff0c 快速定位到yml配置文件 安装 xff0c 在idea的插件市场直接搜索valuetoyml 自己在插件市场下载安装 插件详情 a
  • CA私有证书中心

    CA服务端 安装CA认证软件包中心 linux默认安装了 xff1a span class token function rpm span qf span class token variable span class token vari
  • MarkDown-IT插件使用

    目的 使后端返回数据库返回内容 xff0c 呈现到前端页面时 xff0c 展示它响应的MarkDown语法 实现机制 后端数据库直接存入Markdown语法 xff0c sql数据库字段数据类型建议采用LongText xff0c 后端传输

随机推荐

  • [Rust GUI]fltk-rs的helloworld

    1 安装VSCode 下载安装VSCode 安装VSCode扩展 rust analyzer或rust analyzer CN 2 安装Microsoft C 43 43 生成工具 访问微软官网下载生成工具 xff0c 勾选使用 C 43
  • OpenHarmony/HarmonyOS通用事件

    通用事件 点击事件 组件被点击时触发的事件 事件 onClick event nbsp event nbsp ClickEvent nbsp gt nbsp void 点击动作触发该回调 event返回值见ClickEvent对象说明 Cl
  • 通用信息整理

    通用事件 点击事件 触摸事件 挂载卸载事件 拖拽事件 按键事件 焦点事件
  • OpenHarmony/HarmonyOS文本通用属性

    文本通用属性 作者 坚果 团队 坚果组织 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长 累计培养三个小队长
  • OpenHarmony/HarmonyOS基础组件之XComponent

    基础组件之XComponent 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长 累
  • OpenHarmony3.2release抢先体验

    OpenHarmony3 2release抢先体验 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋
  • OpenHarmony历史工程迁移

    OpenHarmony历史工程迁移 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队长
  • OpenHarmony应用沙箱路径和真实物理路径对应关系

    应用沙箱路径和调试进程视角下的真实物理路径 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中作
  • 创建ArkTS卡片

    创建ArkTS卡片 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿 技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长Har
  • 卡片生命周期管理

    卡片生命周期管理 创建ArkTS卡片 xff0c 需实现FormExtensionAbility生命周期接口 在EntryFormAbility ts中 xff0c 导入相关模块 span class token keyword impor
  • 【坚果派-坚果】ArkTS如何优化Flex的布局性能

    如何优化Flex的布局性能 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长
  • 【坚果派-坚果】ArkTS气泡提示

    气泡提示 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenHarmony布道师 xff0c 擅长HarmonyOS
  • Windows服务搭建web网站,使用cpolar内网穿透实现公网访问

    文章目录 概述1 搭建一个静态Web站点2 本地浏览测试站点是否正常3 本地站点发布公网可访问3 1 安装cpolar内网穿透3 2 创建隧道映射公网地址3 3 获取公网URL地址 4 公网远程访问内网web站点5 配置固定二级子域名5 1
  • 搭建一站式OpenHarmony设备开发Windows开发环境

    搭建一站式OpenHarmony设备开发Windows开发环境 作者 xff1a 坚果 团队 xff1a 坚果派 公众号 xff1a 大前端之旅 润开鸿技术专家 xff0c 华为HDE xff0c InfoQ签约作者 xff0c OpenH
  • 关于OpenHarmony蜂窝通信框架能力的说明

    蜂窝通信框架能力 xff08 如需提供完整蜂窝通信能力需芯片厂商适配支持HDI接口 xff09 xff1a 支持双卡管理 xff0c 双卡通话 短信 搜网等基础能力接口和框架 支持VoLTE语音通话接口和框架 xff08 需要芯片厂商实现I
  • 第三方登录用户信息表设计

    user表 xff1a 站内账号表 xff0c 即原始的账号 密码信息表 字段有 user id username password social account表 xff1a 第三方账号信息表 如 wx account 微信账号信息表 a
  • HarmonyOS Codelabs最新参考

    HarmonyOS Codelabs最新参考 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为HDE InfoQ签约作者 OpenHarmony布道师 擅长HarmonyOS应用开发 熟悉服务卡片开发 在 战码先锋 活动中
  • OpenHarmony Stage模型下的窗口开发

    Stage模型下的窗口开发 作者 坚果 团队 坚果派 公众号 大前端之旅 润开鸿技术专家 华为 HDE InfoQ 签约作者 OpenHarmony 布道师 擅长 HarmonyOS 应用开发 熟悉服务卡片开发 在 战码先锋 活动中作为大队
  • 大教堂与集市

    文章目录 第一章 教堂与市集第二章 信一定要寄到第三章 拥有用户的重要第四章 尽早发布 xff0c 经常发布新版本第五章 有多少眼球驯服了复杂度第六章 今花非昨花 xff1f 第七章 Popclient 变成 Fetchmail第八章 Fe
  • 大聪明教你学Java | Spring Boot 项目设置 X-Content-Type-Options 响应头

    前言 我们在开发应用系统的时候 xff0c 总会遇到各种各样的漏洞 xff0c 即便是项目上线后 xff0c 甲方霸霸也会找专门搞安全的公司来对我们的应用系统进行扫描 xff0c 扫描完后或多或少也会出现一些漏洞 xff0c 我们就得加班对