基于面向切面的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注入过滤的主要内容,如果未能解决你的问题,请参考以下文章

基于面向切面的sql注入过滤

AOP面向切面的编程使用Interceptor内置的容器进行属性注入

面向切面的Spring

Spring里面的切面(aop)重要吗?还有Spring里面主要用到了哪几种注入方式

Spring

java面向切面编程总结-面向切面的本质