基于面向切面的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("请检查输入的内容,不要参入一些特殊符号");
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值