利用切面和反射机制过滤请求中的特殊字符

java过滤请求参数中的非法字符,防止XSS攻击、SQL盲注等 //过滤请求参数中的非法字符,防止XSS攻击、SQL盲注等 String reg = “(?:’)|(?:–)|(/\(?:.|[\n\r])?\*/)|(\b(frame|<frame|iframe|<iframe|img|<img|javascript|<javascript|script|<script|alert|select|update|and|or|de... 阅读详情

直接上代码:

@Slf4j
@Aspect
@Configuration
public class xxxxxAspect {
static Pattern symbolPattern = Pattern.compile("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]");
//根据需要改过滤范围
@Before("execution(* com.***..*.*(..))")
    public void permissionCheck(JoinPoint point) {
//        System.out.println("@Before:模拟权限检查...");
//        System.out.println("@Before:目标方法为:" +
//                point.getSignature().getDeclaringTypeName() +
//                "." + point.getSignature().getName());
//        System.out.println("@Before:参数为:" + Arrays.toString(point.getArgs()));
//        System.out.println("@Before:被织入的目标对象为:" + point.getTarget());

        Object[] args = point.getArgs();
        MethodSignature methodSignature = (MethodSignature) point.getSignature();
        String[] parameterNames = methodSignature.getParameterNames();
        Class[] parameterTypes = methodSignature.getParameterTypes();


        for (int i = 0; i < parameterNames.length; i++) {
            if (XXXXXClass.class.isAssignableFrom(parameterTypes[i])) {
                System.out.println("before replace:" + args[i]);
                XXXXXClass xxxxx = (XXXXXClass) args[i];
                Class c = xxxxx.getClass();
                // 获取实体类的所有属性,返回Field数组
                Field[] field = c.getDeclaredFields();
                for (int j = 0; j < field.length; j++) {
                    // 获取属性的名字
                    String name = field[j].getName();
                    if (String.class == field[j].getType() && StringUtils.isNotEmpty(name)) {
                        name = (new StringBuilder()).append(Character.toUpperCase(name.charAt(0))).append(name.substring(1)).toString();
                        try {
                            Method m = c.getMethod("get" + name);
                            // 调用getter方法获取属性值
                            String value = String.valueOf(m.invoke(xxxxx));
                            if (StringUtils.isNotEmpty(value) && !"null".equals(value)) {
                                log.info("原请求参数为:" + name + "===" + value);
                                m = c.getMethod("set" + name, String.class);
                                Matcher matcher = symbolPattern.matcher(value);
                                value = matcher.replaceAll("").trim();
                                m.invoke(xxxxx, value);
                                log.info("替换特殊字符后的请求参数为:" + name + "===" + value);
                            }
                        } catch (NoSuchMethodException e) {
                            log.error("before异常NoSuchMethodException:", e);
                        } catch (IllegalAccessException e) {
                            log.error("before异常IllegalAccessException:", e);
                        } catch (InvocationTargetException e) {
                            log.error("before异常InvocationTargetException:", e);
                        }
                    }
                }
            }
        }
}

如果帮到你,请帮我点个赞!

手把手教你用若依4.7.8搭建靶场:复现计划任务RCE漏洞(含Java反序列化绕过技巧) 本文详细解析了若依4.7.8版本中计划任务RCE漏洞的复现过程,包括环境搭建、漏洞原理分析及实战利用技巧。通过十六进制编码绕过Java反序列化黑名单机制,实现远程代码执行,为安全研究人员提供深度技术参考。文章还提供了防御措施和高级研究工具推荐。 阅读详情

相关推荐

AI生成代码的安全漏洞

在软件开发效率提升300%的AI时代,代码生成工具正以惊人的速度渗透至金融、医疗、自动驾驶等关键领域。然而,斯坦福大学2022年对GitHub Copilot的89次实验揭示了一个残酷现实:近半数(45%)的AI生成代码存在安全缺陷,其中Java语言漏洞率高达72%,远超Python(38%)和JavaScript(43%)。更令人震惊的是,跨站脚本(XSS)和日志注入漏洞占比超86%,这些高危漏洞源于AI模型对训练数据中不安全模式的无意识复制,暴露出当前AI代码生成技术的深层缺陷。

Deng945201314的博客 1496

springboot项目拦截前端请求中的特殊字符串

项目场景: springboot项目中,需要对前端请求数据进行过滤,拦截特殊字符。 问题描述 GET请求可以很方便的通过处理URL判断是否包含特殊字符,POST类型请求需要对form-data/json特殊处理,使用@RequestBody注解的controller获取不到数据 原因分析: request中的getInputStream()方法和getReader()方法只能获取一次数据,通过@RequestBody注解再次获取getInputStream()拿到结果为空,此处通过重写getInputStr

墨落成白的博客 6585

实现防sql注入的特殊字符切面过滤拦截

实现防sql注入的特殊字符切面过滤拦截 不使用过滤器、spring拦截器原因: 1、http输入流不能重复读取,需要重写HttpServletRequest的相关方法,将http输入流第一次读取的数据缓存起来。 2、基于尽可能少修改原代码进行在这里插入代码片扩展的原则,避免修改代码造成的未知风险。 package com.to8to.tbt.aoc.interceptor; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON

weixin_38772076的博客 1163

特殊字符过滤

由于跨站脚本会导致会话被劫持、敏感信息泄漏、账户被盗,严重时甚至造成数据修改、删除,从而导致业务中断,因此需检测跨站脚本是否存在 1.web.xml配置 <!-- Character Encoding filter --> <filter> <filter-name>encodingFilter</filter-name> <...

指尖的余香 2945

注解&反射&切面

注解&反射&切面

yhh的博客 345

带你学习Android中的ContentObserver

通过使用,开发者可以有效地监听系统设置的变化,例如屏幕亮度等。这种机制使得应用能够动态响应系统设置的更改,提升用户体验。在实现需要与系统设置交互的应用时,合理使用是非常重要的。

执剑人 1311

Spring AOP切面注解类应用实例:请求入参参数特殊字符过滤、日志切面

一:请求入参参数特殊字符过滤 对接平安银行等第三方接口的时候,接口入参不能包含某些字符串,但是不能做过滤器,过滤器影响面过广。 1、自定义注解 package fly.cloud.bank.annotation; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ParamReplace { }

weixin_41761540的博客 1465

利用Cesium引擎实现大疆智图B3DM三维模型的高效加载与可视化

本文详细介绍了如何利用Cesium引擎高效加载与可视化大疆智图B3DM三维模型。通过性能优化实战和典型应用场景分析,帮助开发者掌握模型预处理、渲染参数调优及高级功能实现技巧,提升大规模倾斜摄影数据的网页端展示效率。

weixin_29231725的博客 220

SpringBoot拦截所有请求校验特殊字符

拦截请求参数重的特殊字符

qq_43147161的博客 5256

【超详细】安装了anaconda后,Ubuntu18+COLMAP配置疯狂踩坑踩至魔怔的记录

本博客收集了博主在Ubuntu18系统中编译COLMAP所遇到的困难,提供了解决方法,也收集了目前网上大多数的坑,除此之外,也为Ubuntu18系统下COLMAP的安装提供了一种新的路径。

Stay_Foo_lish的博客 3511

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 604

springboot拦截器与过滤器

物理层的基本概念: 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层的主要任务描述为:确定传输媒体的接口的一些特性。 数据通信的基础知识: 典型的数据通信模型: 输入汉字 --》pc机将汉字转化成数字比特流传递--》比特流传到调制解调器后被转化为模拟信号进行传导--》当传到目标电脑后又被调制解调器转化为比特流,进而转化为汉字显示出来。

最自由的笑的博客 476

深入解析Android Qcom Camera HAL3架构与Camx线程模块

本文深入解析了Android Qcom Camera HAL3架构与Camx线程模块的核心原理。文章以高通芯片平台为例,剖析了从按下快门到生成照片的完整Camera流程分析,重点阐述了Camx框架中线程池、消息队列及Fence同步机制如何协同工作,以实现高效、稳定的多线程并发图像处理,为相机性能优化提供理论基础。

weixin_29184075的博客 221

XSS过滤器的实现

一、XSS是什么   全称跨站脚本(cross site script)XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。 比如在input框中填写了可以执行的javascript脚本,而后台并没有做过滤与校验。 二、过滤器是什么   过滤器,顾名思义过滤某种物质的设备,在Java中用...

weixin_33834679的博客 1114

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 207

Clock Gating设计陷阱:为什么你的ICG cell总是导致setup violation?(附解决方案)

本文深入分析了数字IC设计中ICG(Integrated Clock Gating)单元导致setup时序违规的常见问题,包括时钟偏斜和数据路径过长两大核心原因。通过量化分析影响因素,提供了逻辑重组、寄存器重定时等优化策略,并介绍了预防性设计方法和物理实现阶段的优化技巧,帮助工程师有效解决ICG相关的setup violation问题。

weixin_29168153的博客 206

一些可能的小知识点

如何防止sql注入攻击? 什么是sql注入攻击,在http中注入恶意sql代码,服务器在使用数据构建数据库的时候,恶意代码被一起执行 如何防制? 1,过滤特殊字符入单引号双引号 2,使用预编译的preparestatement代替拼接sql 3,web端进行有效性检验并限制字符串的长度 ioc的底层实现? ioc就是控制反转,是一种设计思想。 在spring中,就是由spring控制对象的生命周期和对象之间的关系。 也就是创建对象的控制权转移,以前是由代码自己控制,现在转移到第三方。 是

joshuacty的博客 134

【CANoe】CAPL_ECU上电后首帧报文发出时间检测

【CANoe】CAPL_ECU上电后首帧报文发出时间检测,通过CANoe I/O口检测电压实现

星Yeah 的博客 2509

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

通过自定义注解 +AOP 切片实现敏感词的过滤

在 Java 中创建一个新的文件,并为注解定义一个新的接口,例:SensitiveFilter.java。@Target(ElementType.METHOD) // 表示这个注解可以用于方法上@Retention(RetentionPolicy.RUNTIME) // 表示这个注解在程序运行时是可访问的// 这个方法中的 text 参数将被过滤。

帆的博客 577

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

js过滤url中的特殊字符

在URL传递参数中,有一些特殊字符,而这些些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。 下表中列出了一些URL特殊符号及编码十六进制值 1. + URL 中+号表示空格 %2B 2. 空格 URL中的空格可以用+号或者编码 %20 3. / 分隔目录和子目录 %2F 4. ? 分隔实际的 URL 和参数 %3F 5. % 指定

xiaoxiaohui520134的博客 4275

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java 过滤器过滤特殊字符

1、继承Filter的过滤类 package fly.cloud.bank.config.filter; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * .

weixin_41761540的博客 2770

java正则表达式 过滤特殊字符的正则表达式

// 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException { // 只允许字母和数字 // String regEx ="[^a-zA-Z0-9]"; // 清除掉所有特殊字符 String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].!@

语不惊人死不休 7万+

Nutz中过滤特殊字符

##Servlet中有获取Request参数的方法,而Nutz中也有重写类似的方法,我们只要知道它如何得到RequestMap就可以处理请求中的参数,进而对它进行处理。 在Nutz项目中的MainModule中配置你写的类(如AnyMobileActionFilter.class); 把需要过滤的字符写在配置文件中(如:SCFilter.properties). 编写AnyMobileActionF

洲上牧童 1705

特殊字符过滤(并不是很全,可以参考)

public Function RSQL(strChar) If strChar = “” or IsNull(strChar) Then RSQL = “”:Exit Function Dim strBadChar, arrBadChar, tempChar, I strBadChar = “$,#,’,%,^,&,?,(,),<,>,[,],{,},/,,;,:,” &am...

Coisini的博客 4261
上一篇: 利用反射遍历一个POJO对象的各个字段名及属性
下一篇: 垃圾回收器如何工作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值