当前位置:

首页 > 编程开发 > Springboot2.0防止XSS攻击的方式有哪些

Springboot2.0防止XSS攻击的方式有哪些

在平时做项目代码开发的时候,很容易忽视XSS攻击的防护,网上有很多自定义全局拦截器来实现XSS过滤,其实不需要这么麻烦,SpringBoot留有不少钩子(扩展点),据此我们可以巧妙地实现全局的XSS过滤防止XSS攻击,一般有两种做法:转义使用工具类HtmlUtils实现过滤将敏感标签去除jsoup实现了非常强大的clean敏感标签的功能转义做法的三种实现:转义方法一:注册自定义转换器自定义转换器,集成PropertyEditorSupport类实现,转换器还可以实现数据格式转换,例如:date的转换;@C

本文目录

    在平时做项目代码开发的时候,很容易忽视XSS攻击的防护,网上有很多自定义全局拦截器来实现XSS过滤,其实不需要这么麻烦,SpringBoot留有不少钩子(扩展点),据此我们可以巧妙地实现全局的XSS过滤

    防止XSS攻击,一般有两种做法:

    转义
    使用工具类HtmlUtils实现

    过滤
    将敏感标签去除
    jsoup实现了非常强大的clean敏感标签的功能

    转义 做法的三种实现:

    转义方法一:注册自定义转换器

    自定义转换器,集成PropertyEditorSupport类实现,转换器还可以实现数据格式转换,例如:date的转换;

    @Component
    public class DateEditor extends PropertyEditorSupport {
    
        Pattern pattern = Pattern.compile("[^0-9]");
    
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            if (StrUtil.isBlank(text)) {
                return;
            }
            text = text.trim();
            Matcher matcher = pattern.matcher(text);
            text = matcher.replaceAll("");
    
            int length = text.length();
            Date date;
            switch (length) {
                case 14:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHHmmss")).toDate();
                    break;
                case 12:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHHmm")).toDate();
                    break;
                case 10:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMddHH")).toDate();
                    break;
                case 8:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMMdd")).toDate();
                    break;
                case 6:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyyMM")).toDate();
                    break;
                case 4:
                    date = DateTime.parse(text, DateTimeFormat.forPattern("yyyy")).toDate();
                    break;
                default:
                    return;
            }
            setValue(date);
        }
    }
    @Component
    public class StringEscapeEditor extends PropertyEditorSupport {
    
        public StringEscapeEditor() {
            super();
        }
    
        @Override
        public String getAsText() {
            Object value = getValue();
            return value != null ? value.toString() : "";
        }
    
        @Override
        public void setAsText(String text) {
            if (text == null) {
                setValue(null);
            } else {
                String value = text;
                value = value.trim();
                setValue(value);
            }
        }
    }
    @Slf4j
    @Component
    public class CommentWebBindingInitializer extends ConfigurableWebBindingInitializer {
    
        private final StringEscapeEditor stringEscapeEditor;
    
        private final DateEditor dateEditor;
    
        @Autowired
        public CommentWebBindingInitializer(StringEscapeEditor stringEscapeEditor, DateEditor dateEditor) {
            this.stringEscapeEditor = stringEscapeEditor;
            this.dateEditor = dateEditor;
        }
    
        @Override
        public void initBinder(WebDataBinder binder) {
            log.info("init bind editor");
            super.initBinder(binder);
            // 注册自定义的类型转换器
            binder.registerCustomEditor(Date.class, dateEditor);
            binder.registerCustomEditor(String.class, stringEscapeEditor);
        }
    }

    转义方法二:BaseController

    需要XSS防护的Controller的需要继承该BaseController

    public class BaseController {
     
        @Autowired
        private StringEscapeEditor stringEscapeEditor;
     
        @InitBinder
        public void initBinder(ServletRequestDataBinder binder) {
            binder.registerCustomEditor(String.class, stringEscapeEditor);
        }
    }

    转义方法三:Converter

    @Component
    public class StringEscapeEditor implements Converter {
     
        @Override
        public String convert(String s) {
            return StringUtils.isEmpty(s) ? s : HtmlUtils.htmlEscape(s);
        }
     
    }
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
     
        @Autowired
        private LoginInterceptor loginInterceptor;
     
        @Autowired
        private StringEscapeEditor stringEscapeEditor;
     
        /**
         * 在参数绑定时,自定义String->String的转换器,
         * 在转换逻辑中对参数值进行转义,从而达到防XSS的效果
         *
         * @param registry
         */
        @Override
        public void addFormatters(FormatterRegistry registry) {
            registry.addConverter(StringEscapeEditor);
        }
     
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(loginInterceptor)
                    .addPathPatterns("/**")
                    // 路径不包括contextPath部分
                    .excludePathPatterns("/user/login", "/user/logout", "/index/test1");
        }
     
        /**
         * 前后端分离需要解决跨域问题
         *
         * @param registry
         */
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
                    .allowCredentials(true).maxAge(3600);
        }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    Xbox销量暴跌百万台,微软主机遇至暗时刻
    Xbox销量暴跌百万台,微软主机遇至暗时刻

    Xbox硬件销量近年来持续大幅萎缩,这一疲软态势早在上一代主机周期就已初现端倪——当时PS4的市场表现远超XboxOne;而进入本世代,XboxSeriesX|S的处境则愈发艰难。早前有消息指出,XboxSeriesX|S在2025年的销量预估约为180万台。然而,一位业内公认可信度极高的消息人士最新披露:实际情况更为严峻,该系列主机今年的实际出货量已骤降至约100万台。这一数字背后,暴露出Xbox本世代硬件业务所面临的深层危机:多位资深行业分析师及微软前高管公开表示

    PHPCMS XSS漏洞修复指南
    PHPCMS XSS漏洞修复指南

    处理PHPCMSXSS漏洞的核心是输入验证、输出编码和多层次防御。首先,服务器端对所有用户输入进行白名单过滤,清除恶意标签与属性;其次,使用htmlspecialchars()等函数按上下文对输出内容进行HTML、JavaScript或URL编码;再次,部署CSP限制脚本执行;最后,定期更新系统并结合WAF、HttpOnlyCookie等外围防护措施。

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    如何使用PHP防御跨站脚本(XSS)与远程代码执行攻击
    如何使用PHP防御跨站脚本(XSS)与远程代码执行攻击

    如何使用PHP防御跨站脚本(XSS)与远程代码执行攻击引言:在当今互联网世界中,安全性成为了一个至关重要的问题。XSS(跨站脚本攻击)和远程代码执行攻击是两种最常见的安全漏洞之一。本文将探讨如何使用PHP语言来防御这两种攻击,并提供几种方法和技巧来保护网站免受这些攻击的威胁。一、了解XSS攻击XSS攻击是指攻击者通过在网站上注入恶意脚本来获取用户的个人信息、

    PHP和Vue.js开发安全性最佳实践:防止XSS攻击
    PHP和Vue.js开发安全性最佳实践:防止XSS攻击

    PHP和Vue.js开发安全性最佳实践:防止XSS攻击随着互联网的快速发展,网络安全问题变得越来越重要。其中,XSS(跨站脚本攻击)是一种非常常见的网络攻击类型,旨在利用网站的安全漏洞,向用户注入恶意代码或篡改网页内容。在PHP和Vue.js开发中,采取一些安全性最佳实践是非常重要的,以防止XSS攻击。本文将介绍一些常用的防止XSS攻击的方法,并提供相应的代

    PHP中的安全XSS过滤技术解析
    PHP中的安全XSS过滤技术解析

    PHP是一种广泛应用于网站开发的编程语言,但在使用PHP开发网站时,安全问题常常引起人们的担忧。其中之一就是跨网站脚本攻击(Cross-SiteScripting,XSS),是一种常见的网络安全漏洞。为了解决这个问题,PHP提供了一些安全XSS过滤技术。本文将介绍PHP中的安全XSS过滤技术的原理和使用方法。首先,我们需要了解什么是XSS攻击。XSS攻击

    确保您的Java XML处理程序安全:关注安全性
    确保您的Java XML处理程序安全:关注安全性

    介绍XML处理是Java应用中的一项常见任务,它允许应用程序处理和交互XML数据。然而,如果没有适当的安全性措施,XML处理可能会引入各种安全漏洞。XML解析器XML解析器是用于处理XML文档的软件组件。选择安全的XML解析器非常重要,它应符合XML标准并具有内置的安全性功能。以下是一些建议:importorg.xml.sax.SAXParseException;importorg.xml.sax.helpers.DefaultHandler;classMyErrorHandlerextendsDefau

    解决Python web开发中的跨站脚本攻击(XSS)的方法
    解决Python web开发中的跨站脚本攻击(XSS)的方法

    随着互联网的发展,网站越来越多,而网站的安全性也变得越来越重要。跨站脚本攻击(XSS)就是一种常见的网站安全问题,它可以让攻击者利用网站漏洞,篡改网站内容,修改用户信息或者其他恶意行为。本文将介绍PythonWeb开发中的XSS问题以及解决方案。一.XSS是什么跨站脚本攻击(XSS)是一种多发现于web应用程序中的安全漏洞,是指攻击者能够在网页中嵌入一些

    解析SpringBoot和SpringMVC之间的异同
    解析SpringBoot和SpringMVC之间的异同

    解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

    探索SpringCloud和SpringBoot在微服务领域的不同应用方式
    探索SpringCloud和SpringBoot在微服务领域的不同应用方式

    近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。