Springboot 实战一个依赖解决XSS攻击

news/2025/2/10 23:50:26/

1. 什么是XSS介绍

XSS: Cross Site Scripting,为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为XSS。

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中 Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

在一开始的时候,这种攻击的演示案例是跨域的,所以叫"跨站脚本"。
但是发展到今天,由于JavaScript的强大功能基于网站前端应用的复杂化,是否跨域已经不再重要。但是由于历史原因,XSS这个名字一直保留下来。
XSS长期以来被列为客户端Web安全中的头号大敌。因为XSS破坏力强大,且产 生的场景复杂,难以一次性解决。
现在业内达成的共识是:针对各种不同场景产生的XSS,需要区分情景对待。
攻击原理:

XSS的原理是WEB应用程序混淆了用户提交的数据和JS脚本的代码边界,导致浏览器把用户的输入当成了JS代码来执行。

比如再评论接口,本来提交的是正常的字符串,但是坏人提交了<script>alert('hey!you are attacked');</script>
或者<script>alert('hey!you are attacked');</script>
。再别人看他发的评论的时候。如果是直接将评论渲染数来是不是就直接执行了这个脚本了,第一个劫持流量实现恶意跳转、第二个是恶意弹窗。当然还很多工具方式。参考:万字讲解9种Web应用攻击与防护安全。XSS、CSRF、SQL注入等是如何实现的

Springboot中防御

xss-spring-boot-starter 自动装配包封装了AntiSamy实现了XSS防御功能。

AntiSamy是OWASP的一个开源项目,通过对用户输入的 HTML / CSS / JavaScript
等内容进行检验和清理,确保输入符合应用规范。AntiSamy被广泛应用于Web服务对存储型和反射型XSS的防御中。

maven坐标:

<dependency><groupId>com.admin4j</groupId><artifactId>xss-spring-boot-starter</artifactId><version>0.0.7</version>
</dependency>

查看最新依赖版本 https://central.sonatype.com/artifact/com.admin4j/xss-spring-boot-starter/

配置

admin4j:xss:match-pattern: 1ignore-uris:- /xss/form-ignore/?include-uris:- /xss/form-include/?
  • match-pattern: 匹配模式
    • 0:全部关闭(不使用xss)
    • 1 忽略模式 (按照 ignoreUris 没有出现在这里的才会执行xss过滤)
    • 2 包含模式 (按照 includeUris 只有出现在这里的才会执行xss过滤 )
    • 其他全部开启xss
  • ignore-uris:忽略 uri 列表,支持ant风格
  • include-uris:包含uri 列表,支持ant风格
  • antisamy-policy: 防护xss策略。可选值:“”,“ebay”,“anythinggoes”,“myspace”,“slashdot”,“tinymce”, 自定义

AntiSamy策略文件

ntiSamy对“恶意代码”的过滤依赖于策略文件。策略文件规定了AntiSamy对各个标签、属性的处理方法,策略文件定义的严格与否,决定了AntiSamy对XSS漏洞的防御效果。在AntiSamy的jar包中,包含了几个常用的策略文件,

image-20230427173421250

此处我们拷贝antisamy-ebay.xml文件到resources目录下并命名为antisamy-test.xml,来自定义AntiSamy策略

image-20230427173504681

测试

@RestController
@RequestMapping("xss")
public class XssController {@GetMappingpublic String get(String key) {return key;}@PostMapping("form")public String form(User user) {return JSON.toJSONString(user);}@PostMapping("form-ignore/**")public String formIgnore(User user) {return JSON.toJSONString(user);}@PostMapping("form-include/**")public String formInclude(User user) {return JSON.toJSONString(user);}@PostMapping("json")public String json(@RequestBody User user) {return JSON.toJSONString(user);}
}

测试代码地址 https://github.com/admin4j/admin4j-example/blob/master/src/main/java/com/admin4j/xss/XssController.java

image-20230427173534453

image-20230427173552129

image-20230427173629644

项目地址:https://github.com/admin4j/admin4j-framework


http://www.ppmy.cn/news/69523.html

相关文章

ChatGPT背后的核心技术报告(附下载)

输入几个简单的关键词&#xff0c;AI能帮你生成一篇短篇小说甚至是专业论文。最近大火的ChatGPT在邮件撰写、文本翻译、代码编写等任务上强大表现&#xff0c;让埃隆马斯克都声称感受到了AI的“危险”。ChatGPT的计算逻辑来自于一个名为transformer的算法&#xff0c;它来源于2…

【前端客栈】使用CSS实现畅销书排行榜页面

&#x1f4ec;&#x1f4eb;hello&#xff0c;各位小伙伴们&#xff0c;我是小浪。大家都知道&#xff0c;我最近是在更新各大厂的软件测试开发的面试真题&#xff0c;也是得到了很大的反馈和好评&#xff0c;几位小伙伴也是成功找到了测开的实习&#xff0c;非常不错。如果能前…

Jenkins使用k8s部署应用

1、jenkins在k8s内部署&#xff08;请参考其他人的文章&#xff09; 2、jenkins安装kubenents相关插件 3、配置k8s云 非常重要,目的是实现jenkins可以远程调用k8s进行部署&#xff0c;并可实现安装jenkins-slave进行构建。使得不再依赖jenkins单机能力进行构建&#xff0c;比较…

kafka3.x详解

kafka 一、简介1.1、场景选择&#xff0c;与其他mq相比1.2、应用场景1.2.1、流量消峰1.2.2、解耦1.2.3、异步通讯 1.3、消息队列的两种模式1.3.1、点对点模式1.3.2、发布/订阅模式 1.4、Kafka 基础架构 二、安装部署2.1、安装包方式2.2、docker安装方式2.3、docker安装kafka-ma…

操作系统——文件管理

0.关注博主有更多知识 操作系统入门知识合集 目录 9.1文件系统概念 思考题&#xff1a; 9.2文件的物理结构 思考题&#xff1a; 9.3文件存储和目录 9.1文件系统概念 文件的定义&#xff1a; 文件是计算机信息存取的一种重要组织形式&#xff0c;文件由若干信息项有序构…

SpringSecurity框架学习与使用

SpringSecurity框架学习与使用 SpringSecurity学习SpringSecurity入门SpringSecurity深入认证授权自定义授权失败页面权限注解SecuredPreAuthorizePostAuthorizePostFilterPreFilter 参考 SpringSecurity学习 SpringSecurity入门 引入相关的依赖&#xff0c;SpringBoot的版本…

Salesforce许可证和版本有什么区别,购买帐号时应该如何选择?

Salesforce许可证分配给特定用户&#xff0c;授予他们访问Salesforce产品和功能的权限。Salesforce版本和许可证是不同的概念&#xff0c;但极易混淆。 Salesforce版本&#xff1a;这是对组织购买的Salesforce产品和功能的访问权限。大致可分为Essentials、Professional、Ente…

【Android学习专题】java基本语法和概念(学习记录)

学习记录来自菜鸟教程 Java 变量 Java 中主要有如下几种类型的变量 局部变量 在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中&#xff0c;方法结束后&#xff0c;变量就会自动销毁类变量&#xff08;静态变量&#xff09; 类变量也声…