基于面向切面的sql注入过滤
Posted 学习使得吾快乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于面向切面的sql注入过滤相关的知识,希望对你有一定的参考价值。
基于面向切面的sql注入过滤
人狠话不多, 直接上代码
application.yml
sql:
inject:
# 是否对接口传入的参数 进行sql注入检测 1是0否
open: 1
# 检测sql注入的正则表达式
regex: (?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(and|exec|execute|insert|select|delete|update|count|drop|%|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|or|like'|and|exec|execute|insert|create|drop|table|from|grant|use|group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|chr|mid|master|truncate|char|declare|or|--|like)\\b)
FilterAspect.java
@Aspect
@Component
@Slf4j
public class FilterAspect
@Value("$sql.inject.regex")
private String regex;
@Value("$sql.inject.open")
private String open;
@Pointcut("execution(* com.test.demo.controller.*.*(..))")
public void myPointcut()
@Before("myPointcut()")
public void doBefore(JoinPoint point)
// joinPoint获取参数值
Object[] args = point.getArgs();
if ("1".equals(open))
for (Object arg : args)
if (Pattern.matches(regex, arg.toString()))
log.error("检测到sql注入攻击");
throw new RuntimeException("请检查输入的内容,不要参入一些特殊符号");
以上是关于基于面向切面的sql注入过滤的主要内容,如果未能解决你的问题,请参考以下文章
AOP面向切面的编程使用Interceptor内置的容器进行属性注入