返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈Springboot2.0防止XSS攻击的几种方式
  • 231
分享到

浅谈Springboot2.0防止XSS攻击的几种方式

Springboot防止XSS攻击Springboot防止XSS 2022-11-13 14:11:03 231人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录防止XSS攻击,一般有两种做法:转义 做法的三种实现:转义方法一:注册自定义转换器转义方法二:BaseController转义方法三:Converter在平时做项目代码开发的时候

在平时做项目代码开发的时候,很容易忽视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<String, String> {
 
    @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;
 
    
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(StringEscapeEditor);
    }
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
                .allowCredentials(true).maxAge(3600);
    }
}

到此这篇关于浅谈springboot2.0防止XSS攻击的几种方式的文章就介绍到这了,更多相关Springboot防止XSS攻击内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈Springboot2.0防止XSS攻击的几种方式

本文链接: https://lsjlt.com/news/171773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈Springboot2.0防止XSS攻击的几种方式
    目录防止XSS攻击,一般有两种做法:转义 做法的三种实现:转义方法一:注册自定义转换器转义方法二:BaseController转义方法三:Converter在平时做项目代码开发的时候...
    99+
    2022-11-13
    Springboot防止XSS攻击 Springboot防止XSS
  • Java中的10种方法防止XSS攻击
    目录 1. 输入验证和过滤2. 使用安全的HTML编码3. 使用安全的URL编码4. 使用HTTP头部中的Content Security Policy (CSP)5. 使用安全的模板引擎6....
    99+
    2023-09-07
    java xss 开发语言
  • SpringBoot防止XSS注入攻击的方法
    这篇文章将为大家详细讲解有关SpringBoot防止XSS注入攻击的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是 XSS 攻击在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚...
    99+
    2023-06-15
  • 防止网络DDoS攻击的三种方法
    1. 流量过滤:通过使用防火墙或其他网络安全设备,对进入网络的流量进行过滤和检测,识别并丢弃可能是DDoS攻击的流量。这种方法可以通...
    99+
    2023-09-22
    DDoS攻击
  • ddos有哪几种攻击方式
    这篇文章主要介绍“ddos有哪几种攻击方式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ddos有哪几种攻击方式”文章能帮助大家解决问题。ddos三种攻击方式是:1、SYN/ACK Flood攻击;...
    99+
    2023-07-05
  • DDoS攻击防护的几种措施
    DDoS (分布式拒绝服务) 攻击是一种网络攻击,旨在通过向目标服务器发送大量流量来使其超负荷运行,从而使其无法正常工作。为了有效防...
    99+
    2023-09-22
    DDoS攻击
  • 浅谈go中cgo的几种使用方式
    目录最简单的CGO程序源码方式调用C函数内部机制编译和链接参数编译参数:CFLAGS/CPPFLAGS/CXXFLAGS链接参数:LDFLAGS通过静态库的方式调用C函数通过动态库的...
    99+
    2024-04-02
  • 浅谈react路由传参的几种方式
    第一种传参方式,动态路由传参 通过设置link的path属性,进行路由的传参,当点击link标签的时候,会在上方的url地址中显示传递的整个url <Link to='/...
    99+
    2024-04-02
  • 浅谈JavaScript的几种继承实现方式
    目录当前需求: 实现 Student 继承自 Person构造函数Person构造函数Student希望满足的条件功能利用原形链实现方法的继承方式1: 子类原型指向父类原型方式2 子...
    99+
    2023-05-17
    JavaScrip 继承
  • 详解React 如何防止 XSS 攻击论$$typeof 的作用
    目录JSXXSS 攻击防止 XSS 攻击的方法React 对于文本节点的处理dangerouslySetInnerHTML 处理富文本节点$$typeof 的作用JSX 先来简单复习...
    99+
    2024-04-02
  • 防止SQL注入攻击的方法
    小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! SQL注入是一种注入攻击,可...
    99+
    2024-04-02
  • 攻击服务器的方式有哪些几种
    攻击服务器的方式有以下几种:1. DDoS攻击:通过大量的流量或请求使服务器不可用。2. SQL注入攻击:利用应用程序中的漏洞,向数...
    99+
    2023-06-13
    攻击服务器 服务器
  • 浅谈前端JS沙箱实现的几种方式
    目录前言 iframe实现沙箱 diff方式实现沙箱 基于代理(Proxy)实现单实例沙箱 基于代理(Proxy)实现多实例沙箱 结束语 参考前言 在微前端领域当中,沙箱是很重要的...
    99+
    2024-04-02
  • 浅谈Java几种文件读取方式耗时
    目录BufferedReaderFiles.readAllBytesFiles.linesCommonIO::readFileToString项目中经常会遇到文件读写,不同的读写方式...
    99+
    2023-05-15
    Java 文件读取 Java 文件读取耗时
  • 浅谈SpringBoot资源初始化加载的几种方式
    目录一、问题二、资源初始化一、问题   在平时的业务模块开发过程中,难免会需要做一些全局的任务、缓存、线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢?...
    99+
    2024-04-02
  • 浅谈ubuntu执行.sh文件几种方式区别
    前言 不同的script执行方式会造成不一样的结果,尤其对bash的环境影响很大,脚本的执行方式有大概以下几种方式。 首先写一个简单的test.sh文件: #!/bin/bash read -p "Please ...
    99+
    2022-06-04
    ubuntu执行.sh文件 ubuntu执行.sh
  • 浅谈几种Java自定义异常处理方式
    目录自定义异常类错误编码处理断言处理应用日志处理异常消息模板和格式化处理总结在Java中,异常是一种常见的处理机制。当程序运行出现错误时,Java会默认抛出一个异常,并通过栈回溯信息...
    99+
    2023-05-19
    Java自定义异常 Java 异常
  • 几种常见攻击的正则表达式
    "( \\s|\\S)*(exec(\\s|\\+)+(s|x)p\\w+)(\\s|\\S)*" //Exec Commond "( \\s|\\S)*((%3C)|<)((...
    99+
    2022-11-15
    攻击 正则表达式
  • 浅谈shell 遍历数组的几种方法
    背景 某天遇到一个问题,现象如下:第一种遍历正常打印元素,然而第二种遍历只会打印一个元素! #!/bin/bash # $1 代表文件目录 # 执行 eg: # sh your_shell.sh /user/li...
    99+
    2022-06-04
    shell 遍历数组
  • 浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)
    Q:一个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费 synchronized lock dblock Q:两个业务服务器,一个数据库,操作:查询用户当前余额...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作