用自定义注解替代@RequestBody实现xss过滤的尝试

需求背景

post请求中的body参数,会解析成 @RequestBody 注解的对象。现在需要把该对象的所有string属性进行XSS过滤,XSS过滤是已有的轮子。

设计思路
  1. 面向扩展开放,面向修改关闭原则。新定义一个注解解决这类问题:@XssCleaned
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XssCleaned {
}
复制代码
实现
  1. 自定义扩展HandlerMethodArgumentResolver,由于需要替代@RequestBody,解析MediaType=application/*+json的请求中的body参数 (参见MappingJackson2HttpMessageConverter) 所以使用的自定义扩展HandlerMethodArgumentResolver的子类RequestResponseBodyMethodProcessor。
public class XssCleanedResolver extends RequestResponseBodyMethodProcessor{

    public XssCleanedResolver(List<HttpMessageConverter<?>> converters) {
        super(converters);
   }

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(XssCleaned.class);
   }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

        Object o = super.resolveArgument(parameter,mavContainer,webRequest,binderFactory);
        //将所有string类型的feild进行xss过滤
        PostBodyUtil.cleanXSSfields(o);
        return o;
   }

}
复制代码
  1. 遍历string属性,进行过滤
public class PostBodyUtil {

    /**
     * 所有string类型的字段都进行xss过滤
     * @return
     */
    public static boolean cleanXSSfields(Object o){
        Arrays.stream(BeanUtils.getPropertyDescriptors(o.getClass())).forEach(t->{
                    if (t.getPropertyType().equals(String.class)){
                        String fieldValue = "";
                        try {
                            fieldValue = (String) t.getReadMethod().invoke(o);
                            t.getWriteMethod().invoke(o,
                                    AntiXssUtil.decodeHtml(AntiXssUtil.cleanHtml(fieldValue)));
                       } catch (IllegalAccessException  | InvocationTargetException e) {
                            LoggerHandler.error(e, "cleanHtml failed!"+t.getName()+":"+fieldValue);
                            return;
                       }
                   }
               }
       );
        return true;
   }
}
复制代码
  1. 注册该resolver 在自定义扩展的WebMvcConfigurationSupport中,重写addArgumentResolvers,将该resolver注册。
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    argumentResolvers.add(new XssCleanedResolver(converters));
}
复制代码
  1. 使用注解实例
@PostMapping("/updateShipments")
public PlatformReturn updateShipments(@XssCleaned Shipment shipment, @CurrentUser SysUser user){

    return myOrderService.updateShipments(shipment,user);
}
复制代码

这样,shipment对象的每个string属性都是经过xss过滤的,其它功能与 @RequestBody 功能相同。

over

转载于:https://juejin.im/post/5c80c3d7f265da2da771f752

Spring Boot应用安全加固实战:HTTPS、CSRF、XSS与SQL注入防护 在Web应用开发中,安全防护是保障系统稳定与数据隐私的基石。其核心原理在于通过多层次防御机制,识别并阻断恶意攻击向量。从技术价值看,有效的安全实践能显著降低数据泄露、服务中断等风险,提升应用的可信度与合规性。常见应用场景涵盖用户认证、数据提交、动态内容渲染及数据库交互等关键环节。本文聚焦于Spring Boot框架,深入探讨如何针对HTTPS通信加密、CSRF跨站请求伪造、XSS跨站脚本攻击及SQL注入等高频威胁,提供从配置到代码的实操方案,例如通过配置SSL证书实现传输加密,并利用Spring Secur 阅读详情

相关推荐

若依框架企业级应用安全与健壮性配置实战指南

在构建企业级Web应用时,安全性与健壮性是保障系统稳定运行的基石。XSS(跨站脚本攻击)防护、防重复提交、全局异常处理等机制构成了后端服务的核心防御体系。其原理在于通过过滤器、注解、统一拦截等技术手段,对输入进行清洗、对操作进行幂等性控制、对错误进行标准化处理,从而有效抵御常见攻击、防止数据异常并提升用户体验。这些技术的价值在于为应用提供了纵深防御能力,是开发高可用、可维护系统的必备实践。典型的应用场景包括用户交互频繁的管理系统、涉及敏感数据处理的业务平台以及高并发访问的在线服务。本文以流行的若依开源框架为

weixin_30824599的博客 343

HandlerMethodArgumentResolver(参数解析器)的作用+使用小案例

前言 今天在做项目时遇到了一个有关参数解析HandlerMethodArgumentResolver的使用疑惑。我想作为新手的我在此和大家一起交流并记录。接下来开始发车...... 正文 首先先来认识一下这个接口,HandlerMethodArgumentResolver。 public interface HandlerMethodArgumentResolver { boolean supportsParameter(MethodParameter var1); Objec...

u012102536的博客 717

若依框架安全攻防实战:从SRC视角剖析高频漏洞与加固方案

在Spring Boot企业级应用开发中,权限控制、会话管理和输入校验是保障系统安全的核心机制。其原理在于通过注解(如@PreAuthorize)实现方法级访问控制,利用JWT或Redis管理身份令牌的生命周期,并借助验证框架对用户输入进行约束。这些技术的价值在于构建纵深防御体系,防止未授权访问、身份冒用和数据篡改,广泛应用于管理后台、OA系统等场景。若依(RuoYi)作为基于Spring Boot的流行快速开发框架,其高度普及性使得针对其的漏洞挖掘成为安全研究的重点。本文聚焦于若依框架中因配置疏忽和常见误

aoanping0730的博客 418

实现自定义返回数据类型(ResponseBodyAdvice)

实现自定义返回数据类型 在这里插入代码片 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O ...

qq_38795959的博客 1649

SpringBoot集成Sa-Token实现CSRF防护实战指南

CSRF(跨站请求伪造)是Web安全领域的常见攻击手段,攻击者利用用户已认证的会话执行非法操作。防御原理是在请求中嵌入不可预测的Token进行来源验证,这是OWASP推荐的基础安全措施。Sa-Token作为轻量级权限框架,通过注解驱动和自动Token管理简化了传统CSRF防护的复杂实现,特别适合前后端分离架构。技术方案包含Token生成/校验、双重验证、集群适配等核心模块,可无缝集成到SpringBoot项目中。典型应用场景包括金融交易、敏感操作等需要会话安全保证的领域,实测能有效拦截99%的自动化攻击。

weixin_34292402的博客 483

SpringBoot+Vue前后端分离AI博客评论模块设计与实现

在Web应用开发中,评论功能是用户交互的核心模块,其设计直接影响用户体验和社区活跃度。其基本原理是通过前后端分离架构,实现数据的异步传输与动态渲染。从技术价值看,一个健壮的评论系统不仅能提升用户粘性,还能通过结构化数据为内容分析和运营提供支持。典型的应用场景包括博客、新闻资讯、电商评价等需要用户生成内容的平台。本文聚焦于如何将AI能力(如敏感词过滤和情感分析)集成到传统评论模块中,通过SpringBoot后端与Vue前端的协同开发,构建一个支持树形结构、富文本处理和智能审核的完整解决方案,其中涉及数据库设计

weixin_30642869的博客 467

【Springboot】@RequestBody参数过滤Xss

在使用@RequestBody情况SpringBoot 参数并不是封装在parameter里面,所以重写getParameterValues和getParameterValue并不能解决问题,@RequestBody是流的形式,所以写Xss过滤如下: import java.io.ByteArrayInputStream; import java.io.IOException; import ja...

qq_36798836的博客 5252

中兴交换机配置SSH登录

SSH是在传统的Telnet协议基础上发展起来的一种安全的远程登录协议。发送和接收数据时, SSH会自动对数据进行加密及解密。相比于Telnet,SSH能防止“中间人”攻击、DNS欺骗、IP 欺骗等,无论是在认证方式或者数据传输的安全性上都有很大的提高。SSH用户认证方式有3种,分别为本地(Local)认证、RADIUS认证和TACACS+认证。以表规划数据为例,说明配置SSH登录的步骤。

才怪的博客 7922

手撕简易mvc框架的仿@ResponseBody和@ResponseView

手撕简易mvc框架的仿@ResponseBody和@ResponseView 思路: 前端所有请求,*.do均由DispatcherServlet进行拦截过滤 在DispatcherServlet中,它的初始化会加载配置在全局参数中的contentConfigLocation下的application.properties文件(application.properties里面配置了n个请求的方法类型【类似是@Controller注解的值,不过是全限定名】) 在初始化中调用HandlerMapping的Lo

Liyq_19的博客 311

手把手教你用C语言实现GNSS卫星方位角计算(附RTKLIB风格代码解析)

本文详细介绍了如何使用C语言实现GNSS卫星方位角计算,包括从地固坐标系到站心坐标系的转换链条。通过RTKLIB风格的代码解析,展示了XYZ到ENU坐标转换的核心原理和C语言实现框架,帮助开发者掌握卫星方位角和高度角的计算技巧,适用于GNSS观测数据质量分析和精密定位算法开发。

weixin_30699915的博客 365

2024年全国大学生电子设计竞赛A题_AC-AC变换电路并联运行

AC-AC变换电路并联运行(A 题)【本科组】

qq_74395263的博客 7836

使用过滤器解决xss攻击、SQL注入问题,自定义注解+aop+反射解决xss攻击问题

一、过滤器和拦截器的区别: 不同点: 过滤器的执行顺序在拦截前 过滤器基于servlet,而拦截器是基于框架,springmvc 过滤器是基于函数回调,而拦截器是基于Java的反射机制 参考博客:https://blog.youkuaiyun.com/zxd1435513775/article/details/80556034 二、基于过滤器解决xss问题 (1)、什么是xss问题 xss问题就是脚本攻击,是指在参数中携带一些script脚本等能在HTML执行的脚本,从而呈现...

qq_37948985的博客 2714

Keras深度学习实战(32)——基于LSTM预测股价

股价预测是时间序列预测中最具挑战性的问题之一,研究股价预测问题具有重要的理论意义和应用价值。针对循环神经网络在股价预测中存在的长期依赖等缺点,本文引入了长短时记忆神经网络以提高股价预测的效果。同时,我们把有关公司的新闻标题的文本数据作为模型的输入变量时,发现预测效果更好,因此我们可以把有关公司的新闻标题的文本数据作为一个有效的输入变量。最后,通过利用 Keras 实现了以上两个股价预测模型,并进行了性能分析和对比。

盼小辉丶的博客 1万+

Swagger UI安全实战:XSS攻击原理与纵深防御体系构建

在Web应用开发中,API文档工具是开发、测试和运维的重要支撑。Swagger UI作为广泛使用的API可视化工具,其核心原理是通过解析后端提供的OpenAPI规范(JSON/YAML),在浏览器端动态渲染生成交互式文档界面。然而,这一动态渲染过程若处理不当,会引入跨站脚本(XSS)安全风险。XSS攻击允许攻击者在受害者的浏览器中注入并执行恶意脚本,其技术价值在于揭示了客户端渲染框架中数据与代码边界模糊的普遍性问题。在API文档、管理后台等场景中,若文档内容(如接口描述、参数说明)来自不可信源或未经验证,就

370

Android 17为什么会重写MessageQueue

DeliQueue 通过消除 MessageQueue 中的锁,提升了系统和应用的性能。合成基准测试: 得益于并发能力的提升(Treiber 栈)和更快的插入速度(最小堆),向繁忙队列进行多线程插入的速度比传统 MessageQueue 快了高达 5000 倍。Perfetto 追踪分析: 在从内部测试人员处获取的 Perfetto 追踪记录中,我们看到应用主线程在锁竞争上消耗的时间减少了 15%。

xiangzhihong8的专栏 269

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3809

XSS攻击深度解析:从原理到防御的Web安全实战指南

跨站脚本攻击(XSS)是Web安全领域最普遍且危害巨大的漏洞之一,其本质是攻击者将恶意脚本注入到受信任的网页中,当用户浏览时,脚本在浏览器端以用户权限执行。XSS攻击主要分为反射型、存储型和DOM型三种类型,其核心原理在于应用程序未对用户输入进行充分验证和转义,导致恶意代码被浏览器解析执行。理解XSS的原理对于构建安全的Web应用至关重要,它不仅是前端安全问题,更可能引发用户数据泄露、会话劫持等严重后果。在SpringBoot等现代Web开发框架中,通过实施严格的输入验证、上下文敏感的输出转义、配置内容安全

weixin_33739523的博客 381

14、多级快速多极子算法(MLFMA)详解

多级快速多极子算法(MLFMA)是一种高效加速矩阵向量乘法(MVM)的数值方法,广泛应用于电磁场积分方程求解中。该算法通过构建多级树结构,将MVM分解为近场直接计算和远场分组计算两部分,利用递归聚类、聚合-平移-分解三阶段处理远场相互作用,并结合采样、模式计算与优化策略,将计算复杂度从O(N^2)降低至O(N log N)。博文详细阐述了MLFMA的核心步骤、数学推导、计算复杂度及实际应用中的优化技术,如伽辽金方案改进、对称性利用和反插值方法,为大规模电磁问题的高效求解提供了系统性指导。

t8u9v0w1x的博客 241

提示工程与XSS防御:架构师如何通过安全提示词生成安全代码

跨站脚本攻击(XSS)是一种常见的Web安全漏洞,攻击者通过注入恶意脚本,在用户浏览器中执行,从而窃取数据或进行其他恶意操作。其原理在于Web应用未对用户输入进行充分验证和输出编码,导致不可信数据被当作代码解析。防范XSS对于保障应用安全至关重要,尤其在当前大模型辅助编程兴起的背景下。通过提示工程,架构师可以将安全原则前置,在需求描述阶段即嵌入XSS防御要求,引导AI生成具备输入验证、输出编码和内容安全策略(CSP)等安全特性的代码。这种方法将安全思维融入开发全流程,从源头降低漏洞引入风险,适用于需要快速生

weixin_34236869的博客 371

S7-1200PLC V90伺服绝对值编码器校准功能块

S7-1200PLC通过111报文和EPOS模式实现位置轴轴控功能(FB284封装)-优快云博客文章浏览阅读173次。EASY_SINA_POS的详细使用介绍请参考下面文章链接:S7-1200PLC使用标准报文111和EPOS模式实现V90 PN总线伺服定位(Easy_SINA_Pos)_西门子sinapos-优快云博客文章浏览阅读132次。文章浏览阅读7k次。先简单说下如何获取FB284,一般有2种方法,Startdrive软件可以操作大部分西门子的驱动器,建议安装调试方便,缺点就是软件太大。

RXXW_Dor的博客 968

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring Boot应用XSS防御全攻略:从编码到CSP的纵深安全实践

跨站脚本攻击(XSS)是Web应用中最常见的安全威胁之一,攻击者通过在网页中注入恶意脚本,窃取用户数据或劫持会话。其防御原理核心在于对用户输入进行严格的验证、净化,并在输出时进行上下文相关的编码,确保数据在不同场景(HTML、JavaScript、URL)下被安全渲染。从技术价值看,有效的XSS防护不仅能保护用户隐私和资产安全,更是维护应用信誉、满足合规要求的基石。在实际的工程实践中,尤其在Spring Boot这类主流Java框架构建的应用中,需要构建覆盖输入、处理、输出全生命周期的纵深防御体系。这包括利

weixin_30617797的博客 404

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Boot 3.X参数绑定失效:从编译配置到依赖变更的完整解决方案

在Web开发中,参数绑定是Spring MVC框架处理HTTP请求的核心机制,它负责将请求中的查询参数、表单数据或JSON内容映射到控制器方法的入参上。其原理基于Java反射和内省机制,结合一系列HandlerMethodArgumentResolver实现数据转换与注入。这一机制的技术价值在于简化了Web层开发,提升了代码的简洁性和可维护性。然而,在框架升级或配置不当的场景下,参数绑定可能失效,导致业务逻辑异常。本文聚焦于Spring Boot 3.X升级后常见的参数解析问题,深入剖析因编译参数缺失、依赖

weixin_30527323的博客 504

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot过滤器与拦截器:从原理到实战的深度解析与应用指南

在Java Web应用开发中,Servlet过滤器和Spring MVC拦截器是处理HTTP请求的核心组件,它们共同构成了应用请求处理链的关键环节。过滤器基于Servlet规范,作用于Web容器层面,能对所有请求(包括静态资源)进行预处理和后处理,常用于全局编码、CORS、基础安全防护等场景。拦截器则是Spring MVC框架的一部分,深度集成于Spring容器,能在控制器方法执行前后进行精细拦截,便于实现依赖注入和基于具体方法的业务逻辑控制,如权限校验和审计日志。理解两者的工作原理与差异,对于构建高效、安

weixin_33728708的博客 394

构建文本安全过滤组件:防御隐藏指令的工程实践

在软件开发和数据处理中,输入验证与清洗是保障系统安全与数据完整性的基础环节。其核心原理在于对来自外部(如用户输入、API响应、文件)的文本数据进行规范化、模式检测和清理,以消除潜在的恶意内容。这项技术的价值在于构建主动防御层,防止SQL注入、XSS攻击、命令注入等安全风险,并确保下游处理逻辑(如数据解析、AI模型推理)的可靠性。其应用场景广泛,涵盖Web表单处理、配置文件加载、日志审计以及大语言模型(LLM)的提示词(Prompt)安全工程。本文聚焦于文本中隐藏指令的检测与防护,通过设计可复用的过滤管道(P

weixin_34072637的博客 422

JWT与Spring Security实现无状态认证的最佳实践

JWT(JSON Web Token)作为现代Web开发中的无状态认证方案,通过自包含的Token机制解决了传统Session在分布式系统中的扩展性问题。其技术原理基于Header、Payload、Signature三部分的结构化数据,采用数字签名确保传输安全。结合Spring Security的过滤器链和权限控制体系,可以构建高安全性的认证授权系统。这种方案特别适合微服务架构和前后端分离场景,能有效提升系统吞吐量并简化权限管理。在实际工程中,需要注意Token过期时间设置、密钥安全管理以及Refresh

weixin_30776545的博客 406

MateCloud漏洞防护:常见安全漏洞与防护措施

MateCloud作为一款基于Spring Cloud Alibaba的微服务架构平台,在安全防护方面提供了全面的解决方案。本文将详细介绍MateCloud如何防范常见的Web安全漏洞,以及其内置的多种安全防护机制。 ## 🔒 MateCloud安全防护体系概述 MateCloud采用多层次、全方位的安全防护策略,覆盖了从身份认证、数据权限到API安全的各个方面。通过`mate-securi

gitblog_00650的博客 447
上一篇: CocoaPods安装、使用
下一篇: vue-router 安卓机有时候不执行的情况
weixin_34026484
博客等级 码龄11年 4642粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值