XSS 安全漏洞介绍及修复方案

简介

XSS(Cross Site Scripting)是一种常见的 Web 安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得网页在用户端执行这些脚本,从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击,可以使用正则表达式对用户输入的数据进行过滤和清理。


XSS 攻击的原理

XSS 攻击通常包含以下几个步骤:

  1. 攻击者在目标网页中注入恶意的脚本代码。
  2. 用户访问目标网页时,浏览器会解析并执行这些恶意代码。
  3. 恶意代码在用户的浏览器中执行,可以获取用户的敏感信息或者进行其他恶意操作。

为了防止 XSS 攻击,需要对用户输入的数据进行过滤和清理,确保其中不包含恶意的脚本代码。


XSS 的分类

  • 反射型 XSS:也称为非持久性 XSS,是最常见的一种 XSS

    XSS 代码常常出现在 URL 请求中,当用户访问带有 XSS 代码的 URL 请求时,服务器端接收请求并处理,然后将带有 XSS 代码的数据返回给浏览器,浏览器解析该段带有 XSS 代码的数据并执行,整个过程就像一次反射,故称为反射型 XSS。

    该类攻击的主要特点是它的及时性和一次性,即用户提交请求后,响应信息会立即反馈给用户。该类攻击常发生在搜索引擎、错误提示页面等对用户的输入做出直接反应的场景中。

  • 存储型 XSS:也称为持久性 XSS

    在存储型 XSS 中,XSS 代码被存储到服务器端,因此允许用户存储数据到服务器端的 Web 应用程序可能存在该类型 XSS 漏洞。攻击者提交一段 XSS 代码后,服务器接收并存储,当其他用户访问包含该 XSS 代码的页面时,XSS 代码被浏览器解析并执行。

    存储型 XSS 攻击的特点之一是提交的恶意内容会被永久存储,因而一个单独的恶意代码就会使多个用户受害,故被称为持久性 XSS,它也是跨站脚本攻击中危害最的一类。二是被存储的用户提交的恶意内容不一定被页面使用,因此存在危险的响应信息不一定被立即返回,也许在访问那些在时间上和空间上没有直接关联的页面时才会引发攻击,因此存在不确定性和更好的隐蔽性。

    这类攻击的一个典型场景是留言板、博客和论坛等,当恶意用户在某论坛页面发布含有恶意的 Javascript 代码的留言时,论坛会将该用户的留言内容保存在数据库或文件中并作为页面内容的一部分显示出来。当其他用户查看该恶意用户的留言时,恶意用户提交的恶意代码就会在用户浏览器中解析并执行。

  • DOM 型 XSS:DOM (Document Objet Model) 指文档对象模型

    DOM 常用来表示在 HTML 和 XML 中的对象。DOM 可以允许程序动态的访问和更新文档的内容、结构等。客户端 JavaScript 可以访问浏览器的文档对象模型。也就是说,通过 JavaScript 代码控制 DOM 节点就可以不经过服务器端的参与重构 HTML 页面。

    该类攻击是反射型 XSS 的变种。它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如 Javascript 代码不正确地使用各种 DOM 方法(如 document.write)和 Javascript 内部函数(如 eval 函数),动态拼接 HTML 代码和脚本代码就容易引发 DOM 型的跨站脚本攻击。

    因此,DOM 型 XSS 与前面两种 XSS 的区别就在于 DOM 型 XSS 攻击的代码不需要与服务器端进行交互,DOM 型 XSS 的触发基于浏览器端对 DOM 数据的解析来完成,也就是完全是客户端的事情。


修复方案

方案1:hotool 工具

注:该方案可以通过奇安信的代码扫描:在 controller 层把请求对象和返回对象都使用该方式进行过滤

依赖引入

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.26</version>
</dependency>

代码

// 清除所有HTML标签,但是不删除标签内的内容
String s = HtmlUtil.cleanHtmlTag("<ddd>ddsfsd</ddd>");
// 清理对象中所有属性值的所有HTML标签,但是不删除标签内的内容
User userNew = JSONObject.parseObject(HtmlUtil.cleanHtmlTag(JSON.toJSONString(userOld)), User.class);

方案2:过滤 XSS 攻击的正则表达式代码

注:该方案并不能通过奇安信的代码扫描

public class XssFilter {
    public static final String HTML_REGEX = "<[^>]*>";
    public static final String SPECIAL_CHAR_REGEX = "[\\&|\\<|\\>|\\'|\\\"|\\%|\\;|\\(|\\)|\\+]";
    public static final String JS_REGEX = "javascript:";

    /**
     * 组合过滤
     */
    public static String filterGroup(String inputText) {
        if (null == inputText) return inputText;
        return filterJS(filterSpecialChar(filterHTML(inputText)));
    }

    /**
     * 过滤HTML标签
     */
    public static String filterHTML(String inputText) {
        if (null == inputText) return inputText;
        return inputText.replaceAll(HTML_REGEX, "");
    }

    /**
     * 过滤特殊字符
     */
    public static String filterSpecialChar(String inputText) {
        if (null == inputText) return inputText;
        return inputText.replaceAll(SPECIAL_CHAR_REGEX, "");
    }

    /**
     * 过滤JavaScript代码
     */
    public static String filterJS(String inputText) {
        if (null == inputText) return inputText;
        return inputText.replaceAll(JS_REGEX, "");
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造智能家居:用ESP32轻松实现无线控制与环境监测

ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器&#xff0c;广泛应用于物联网项目。它由Espressif Systems公司开发&#xff0c;具有强大的处理能力和丰富的外设接口。下面我们将详细介绍ESP32的基础功能和引脚功能&#xff0c;并通过具体的实例项目展示其应用。 主要功能 双核处…

网络安全协议

1. 概述 1.1 网络安全需求 五种需求&#xff1a; 机密性&#xff1a;防止数据未授权公开&#xff0c;让消息对无关听众保密 完整性&#xff1a;防止数据被篡改 可控性&#xff1a;限制对网络资源&#xff08;硬件和软件&#xff09;和数据&#xff08;存储和通信&#xff0…

「2024中国数据要素产业图谱1.0版」重磅发布,景联文科技凭借高质量数据采集服务入选!

近日&#xff0c;景联文科技入选数据猿和上海大数据联盟发布的《2024中国数据要素产业图谱1.0版》数据采集服务板块。 景联文科技是专业数据服务公司&#xff0c;提供从数据采集、清洗、标注的全流程数据解决方案&#xff0c;协助人工智能企业解决整个AI链条中数据采集和数据标…

Kendryte K210 固件烧录

本章将为读者介绍 Kendryte K210 的固件烧录&#xff0c;以及 Kendryte K210 外部 NOR Flash 的空间 分布。 本章分为如下几个小节&#xff1a; 6.1 外部 NOR Flash 的空间分布 6.2 Ubuntu 下的固件烧录 6.3 Windows 下的固件烧录 外部 NOR Flash 的空间分布 Kendryte K210 的…

如何以管理员身份运行CMD?

好久没更新博客了&#xff0c;今天在日常使用中遇到了一个问题&#xff0c;顺便记录下来。 据说国内的谷歌浏览器 Chrome 可以自动升级了&#xff0c;终于不用每次都自己跑去官网下载最新版本&#xff0c;然后安装迁移&#xff0c;重复劳动。下一篇讲如何讲迁移 Chrome&#x…

【Python】已解决:Python读取字典查询键报错“KeyError: ‘d‘”

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;Python读取字典查询键报错“KeyError: ‘d’” 一、分析问题背景 在Python编程中&#xff0c;字典&#xff08;dictionary&#xff09;是一种非常重要的数据结构…

源码分析过滤器与拦截器的区别

博主最近刚拿到一个微服务的新项目&#xff0c;边研究边分析从框架基础开始慢慢带领大家研究微服务的一些东西&#xff0c;这次给大家分析下Springboot中的过滤器和拦截器的区别。虽然上次分析过过滤器&#xff0c;但是主要是分析的cas流程&#xff0c;所以就没太深入&#xff…

[创业之路-129] :制造业企业的必备管理神器-ERP-生产制造

目录 一、ERP生产制造的总体架构 1.1 主要功能模块 1.2 主要流程 二、关键功能详解 2.1 生产管理计划 2.2 物料需求计划MRP 2.3 能力需求计划 2.4 物料与库房管理 一、ERP生产制造的总体架构 1.1 主要功能模块 ERP&#xff08;企业资源计划&#xff09;生产制造系统主…

微信小程序修改应用名称

1、修改名称&#xff08;10分钟即可生效&#xff09; 账号管理员 2、修改icon&#xff08;如果logo带有名称则需要修改&#xff09;

零基础STM32单片机编程入门(二)GPIO详解及驱动LED灯实战含源码视频

文章目录 一.概要二.STM32F103C8T6单片机GPIO口特点二.STM32单片机GPIO内部结构图三.单片机GPIO推挽输出信号流向四.单片机GPIO浮空输入信号流向四.单片机GPIO引脚的复用以及重映射五.CubeMX配置一个GPIO输出驱动LED灯例程六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一…

MATLAB基础应用精讲-【数模应用】协方差分析 (ANCOVA)

目录 几个高频面试题目 协方差分析和多因素方差分析区别 因子方差分析和协方差分析对比 情景1 因子方差分析的主要内容 SPSS实现因子方差分析 情景2 协方差分析的主要内容 SPSS中进行协方差分析 几个相关概念 算法原理 什么是协方差分析 算法特点 ANCOVA 的步骤 …

如何处理消息积压问题

什么是MQ消息积压&#xff1f; MQ消息积压是指消息队列中的消息无法及时处理和消费&#xff0c;导致队列中消息累积过多的情况。 消息积压后果&#xff1a; ①&#xff1a;消息不能及时消费&#xff0c;导致任务不能及时处理 ②&#xff1a;下游消费者处理大量的消息任务&#…

制造业ERP五大生产模式详解!

制造业面临着从成本控制、生产效率到供应链管理的挑战&#xff0c;每一个环节都需要精细化的管理和高效的协同。而ERP系统&#xff0c;作为一种集信息技术与管理思想于一体的管理工具&#xff0c;正逐渐成为制造业转型升级的关键。那么&#xff0c;通过本文你将会了解到&#x…

压电风扇的显著特点及其在电子系统中的应用

压电已经存在了一个多世纪&#xff0c;人们发现某些晶体结构在受到机械应力时产生表面电荷。 这种形式的压电传感器是压电传感器的工作方式。与压电传感器&#xff08;或发电机&#xff09;类似&#xff0c;压电致动器&#xff08;或电机&#xff09;使用补丁[1,3]形式的压电陶…

软件质量保证与测试

目录 一、测试流程 二、测试用例 2.1概念 2.2用例编写格式 三、设计测试点 3.1等价类 3.1.1概念 3.1.2案例 3.1.3适用场景 3.1.4执行用例 3.2边界值 3.2.1概念 3.2.2案例 3.2.3使用场景 3.3判定表 3.3.1判定表使用原因 3.3.2概念 3.3.3案例 3.3.4使用场景 …

【Linux】Ubuntu 部署 Zabbix 7.0

实验环境&#xff1a;Ubuntu-22.04 官方下载地址&#xff1a; 下载Zabbix 7.0 LTS for Ubuntu 22.04 (Jammy), MySQL, Apache 1、下载 Zabbix 官方安装包以及环境配置 下载 zabbix 安装包 wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabb…

Go语言之数据类型

网站&#xff1a;http://hardyfish.top/ 免费书籍分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-61545511-81795b?p3899 访问密码&#xff1a;3899 免费专栏分享&#xff1a; 资料链接&#xff1a;https://url81.ctfile.com/d/57345181-6161623…

篮球联盟管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;球员管理&#xff0c;用户管理&#xff0c;球队管理&#xff0c;论坛管理&#xff0c;篮球资讯管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0…

解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)

错误消息 ssh: connect to host IP port 22: Connection timed out 指出 SSH 客户端尝试连接到指定的 IP 地址和端口号&#xff08;默认 SSH 端口是 22&#xff09;&#xff0c;但是连接超时了。这意味着客户端没有在预定时间内收到来自服务器的响应。 可能的原因 SSH 服务未…

【数据结构与算法】最短路径,Floyd算法,Dijkstra算法 详解

Floyd算法 for (int k 0; k < n; k) {for (int i 0; i < n; i) {for (int j 0; j < n; j) {if (d[i][k] ! INF && d[k][j] ! INF) {d[i][j] min(d[i][j], d[i][k] d[k][j]);}}} }Dijkstra算法&#xff08;基于最小堆&#xff09; void dijkstra(int st…