首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Springboot 对应XSS漏洞类配置处理

Springboot 对应XSS漏洞类配置处理

作者头像
小马哥学JAVA
发布于 2023-07-15 07:44:50
发布于 2023-07-15 07:44:50
79600
代码可运行
举报
文章被收录于专栏:JAVA开发专栏JAVA开发专栏
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
前言:SpringBoot防XSS攻击,这几天自己学习了一下SpringBoot项目怎防Xss攻击,这里记录一下怎么防止Xss攻击的代码,等以后有需要用到的话,自己可以快速找到

1. 什么是 XSS 漏洞?

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

XSS(跨站脚本攻击)是指恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。类似于 sql 注入。是目前最普遍的 Web 应用安全漏洞,也是 Web 攻击中最常见的攻击方式之一。

XSS( 跨站脚本攻击)攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、 VBScript、ActiveX、 Flash 或者甚至是普通的 HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和 cookie 等各种内容。

2. XSS 漏洞攻击原理及攻击手段

HTML 是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是 HTML 标签的开始,之间的字符是页面的标题等等。

当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了 HTML 标签,当这些 HTML 标签引入了一段 JavaScript 脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生 XSS 漏洞。

常用的 XSS 攻击手段和目的有:

1、盗用 cookie,获取敏感信息。

2、利用植入 Flash,通过 crossdomain 权限设置进一步获取更高权限;或者利用 Java 等得到类似的操作。

3、利用 iframe、frame、XMLHttpRequest 或上述 Flash 等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。

4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

5、在访问量极大的一些页面上的 XSS 可以攻击一些小型网站,实现 DDoS 攻击的效果。

最简单的 XSS 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>alert('hello world')</script>
<script src='http://www.smart4j.cn/xxx.js'></script>
<input type="button" value="评论"></input>

3. XSS 分类如下:

分类

主要特点

存储型 XSS

经过后端服务处理,数据存储在数据库端

反射型 XSS

经过后端服务处理,不存储数据库

DOM型 XSS

不经过后端服务处理,不存储数据库

4. XSS 漏洞分析

4.1 存储型 XSS

通过网页注入的代码最终会存储在数据库或其他物理文件中,在某个页面中注入的代码会被浏览器成功执行,该类型的漏洞存在持久性的特点。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;

public class XssStringJsonDeserializer extends JsonDeserializer<String> {
    public XssStringJsonDeserializer() {
    }

    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        String source = p.getText();
        if (StringUtils.isNotBlank(source)) {
            source = this.xssScriptReplace(source);
            return source;
        } else {
            return source;
        }
    }

    public String xssScriptReplace(String value) {
        if (value != null) {
            List<String> regexList = new ArrayList();
            regexList.add("alert\\s*\\((.*?)\\)");
            regexList.add("expression\\s*\\((.*?)\\)");
            regexList.add("<script(\\s*)>(.*?)</script(\\s*)>");
            regexList.add("<style(\\s*)>(.*?)</style(\\s*)>");
            regexList.add("<applet(.*?)/>|<applet(.*?)>(.*?)</applet(\\s*)>");
            regexList.add("<object(.*?)/>|<object(.*?)>(.*?)</object(\\s*)>");
            regexList.add("<embed(.*?)/>|<embed(.*?)>(.*?)</embed(\\s*)>");
            regexList.add("eval\\s*\\((.*?)\\)");
            regexList.add("\\'javascript(\\s*):(.*?)\\'|\\\"javascript(\\s*):(.*?)\\\"");
            regexList.add("\\'vbscript(\\s*):(.*?)\\'|\\\"vbscript(\\s*):(.*?)\\\"");
            regexList.add("<iframe\\s+(.*?)/>|<iframe\\s+(.*?)>(.*?)</iframe(\\s*)>");
            regexList.add("(\\s+)onmouseover\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onmouseover\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onmouseout\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onmouseout\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onmousedown\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onmousedown\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onmouseup\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onmouseup\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onmousemove\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onmousemove\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onclick\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onclick\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)ondblclick\\s*=(\\s*)\\'(.*?)\\'|(\\s+)ondblclick\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onkeypress\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onkeypress\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onkeydown\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onkeydown\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onkeyup\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onkeyup\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)ondragstart\\s*=(\\s*)\\'(.*?)\\'|(\\s+)ondragstart\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onerrorupdate\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onerrorupdate\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onhelp\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onhelp\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onreadystatechange\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onreadystatechange\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onrowenter\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onrowenter\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onrowexit\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onrowexit\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onselectstart\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onselectstart\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onload\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onload\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onunload\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onunload\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onbeforeunload\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onbeforeunload\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onblur\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onblur\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onerror\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onerror\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onfocus\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onfocus\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onresize\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onresize\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onscroll\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onscroll\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)oncontextmenu\\s*=(\\s*)\\'(.*?)\\'|(\\s+)oncontextmenu\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onbounce\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onbounce\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onfinish\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onfinish\\s*=(\\s*)\\\"(.*?)\\\"");
            regexList.add("(\\s+)onstart\\s*=(\\s*)\\'(.*?)\\'|(\\s+)onstart\\s*=(\\s*)\\\"(.*?)\\\"");

            Pattern scriptPattern;
            for(Iterator var3 = regexList.iterator(); var3.hasNext(); value = scriptPattern.matcher(value).replaceAll(" ")) {
                String regex = (String)var3.next();
                scriptPattern = Pattern.compile(regex, 42);
            }
        }

        return value;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小马哥学JAVA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA项目实践,URL存在跨站漏洞,注入漏洞解决方案
跨网站脚本介绍 一 跨网站脚本 跨网站脚本(Cross-site scripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
用户1289394
2021/03/29
2.5K0
如何绕过XSS防护
本文旨在为应用程序安全测试专业人​​员提供指南,以协助进行跨站点脚本测试。源自于OWASP跨站脚本预防备忘单。本文列出了一系列XSS攻击,可用于绕过某些XSS防御filter。针对输入进行过滤是不完全是XSS的防御方法,可以使用这些payload来测试网站在防护XSS攻击方面的能力,希望你的WAF产品能拦截下面所有的payload。
stan1ey
2021/01/23
4.5K0
springboot 实现xss过滤
用户9131103
2023/09/16
5630
项目中如何对XSS统一处理
XSS攻击是指攻击者利用网站中的漏洞,向页面中注入恶意脚本,从而获取用户的信息或者控制用户的计算机。 举一个通俗的例子,早期使用JSP页面渲染页面的项目,如果将用户名改成nick<alert>1</alert>,则当用户打开页面时,就会弹出一个警告框,而这个警告框可以被恶意脚本所替代,例如读取cookies或者其他敏感信息等操作。
闻说社
2023/04/07
7360
Web 安全头号大敌 XSS 漏洞解决最佳实践
XSS 是目前最普遍的 Web 应用安全漏洞,它带来的危害是巨大的,是 Web 安全的头号大敌。
IT技术小咖
2021/02/22
9.3K1
Web 安全头号大敌 XSS 漏洞解决最佳实践
面试官:SpringBoot 该如何预防 XSS 攻击 ?
写此文章的目的是为了记录一下在工作中解决的 XSS漏洞 问题。XSS漏洞是生产上比较常见的问题。虽然是比较常见并且是基本的安全问题,但是我们没有做🙄️ ,也怪我没有安全意识。于是终于有一天被制裁了。所以这次就补上了,记录一下。
民工哥
2024/04/02
2010
面试官:SpringBoot 该如何预防 XSS 攻击 ?
【Java 代码审计入门-03】XSS 漏洞原理与实际案例介绍
为什么会有这一些列的文章呢?因为我发现网上没有成系列的文章或者教程,基本上是 Java 代码审计中某个点来阐述的,对于新人来说可能不是那么友好,加上本人也在学习 Java 审计,想做个学习历程的记录和总结,因此有了本系列的文章。
p4nda
2023/01/03
1.3K0
【Java 代码审计入门-03】XSS 漏洞原理与实际案例介绍
一文了解XSS漏洞和常见payload
刷完了XSS challenge和XSS game 对XSS漏洞有了些许认识 在此做个小结与记录
中龙技术
2022/09/30
4.3K0
一文了解XSS漏洞和常见payload
公司web安全等级提升
公司的一个web数据展示系统,本来是内网的,而且是一个单独的主机,不存在远程控制的问题,所以之前并没有考虑一些安全相关的测试.但是国调安全检查的需要添加这样子的一层防护措施,所以还是不得不添加一下. 仔细想一下,如果内网机被人意外连接网线,确实是会存在被入侵的可能,所以还是添加一下为好.
@坤的
2018/09/21
1.8K0
JeecgBoot抵御XSS攻击实现方案
1. 问题描述 jeecgboot后台启动后,在浏览器输入地址 http://localhost:8080/jeecg-boot/jmreport/view/')%22οnmοuseοver=alert('hacking')%20%20( 弹出对话框 [在这里插入图片描述] 2. 试验环境 jeecgboot 3.0 3. 增加配置类 在jeecg-boot-module-system的config包下,新建xss包,并新增几个类 [在这里插入图片描述] 类的具体代码如下: package org.jeec
JEECG
2022/04/26
6420
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
Filter:Javaweb三大组件之一(另外两个是Servlet、Listener) 概念:Web中的过滤器,当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些通用的功能(登陆验证、统一编码处理、敏感字符过滤……)
没事就要多学习
2024/07/18
1820
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
Spring Boot 应用如何防护 XSS 攻击
来源:blog.csdn.net/qq_45076180/article/details/115000495 1. XSS跨站脚本攻击 ①:XSS漏洞介绍 跨站脚本攻击XSS是指攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被解析执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击! ②:XSS漏洞分类 存储型XSS: 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些
程序猿DD
2023/04/24
9750
Spring Boot 应用如何防护 XSS 攻击
【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
Happyjava
2019/07/16
4.3K0
【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
XSS跨站脚本攻击剖析与防御(跨站脚本攻击漏洞怎么修复)
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
全栈程序员站长
2022/08/02
7.3K0
XSS跨站脚本攻击剖析与防御(跨站脚本攻击漏洞怎么修复)
跨站脚本(XSS)备忘录-2019版
这是一份跨站脚本(XSS)备忘录,收集了大量的XSS攻击向量,包含了各种事件处理、通讯协议、特殊属性、限制字符、编码方式、沙箱逃逸等技巧,可以帮助渗透测试人员绕过WAF和过滤机制。
Bypass
2019/12/23
6.9K0
XSS漏洞总结
同源策略 影响源的因素:host,子域名,端口,协议 a.com通过以下代码:
张树臣
2018/12/18
3.5K0
XSS基础学习
XSS攻击是指在网页中嵌入一段恶意的客户端Js脚本代码片段,JS脚本恶意代码可以获取用户的Cookie、URL跳转、内容篡改、会话劫持……等。
Mirror王宇阳
2020/11/12
9360
干货笔记!一文讲透XSS(跨站脚本)漏洞
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途。
网络安全自修室
2022/03/30
4.6K0
干货笔记!一文讲透XSS(跨站脚本)漏洞
渗透测试XSS漏洞原理与验证(5)——XSS跨站脚本
XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(CascadingStyle Sheets)重名,所以改为XSS。
zhouzhou的奇妙编程
2024/11/08
1.2K0
CTF实战9 XSS跨站脚本漏洞
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
用户1631416
2018/07/25
1.3K0
CTF实战9 XSS跨站脚本漏洞
相关推荐
JAVA项目实践,URL存在跨站漏洞,注入漏洞解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档