【项目问题解决】% sql注入问题

目录

【项目问题解决】% sql注入问题


文章所属专区 项目问题解决


1.问题描述

在处理接口入参的一些sql注入问题,虽然通过MyBatis框架的一些特点处理了大部分sql注入问题,但还有一些是没法处理,比如这种 param LIKE CONCAT(CONCAT('%','%'),'%') 这种情况,%无法预编译或者转义成%导致去数据库查询了全表。

2.问题原因

MyBatis转义失败;

前端没有现值特殊字符;

后端没有过滤特殊字符;

3.解决思路

1.前端限制禁止传入特殊字符

2.后端限制禁止传入特殊字符,例如swagger限制字符传入,但似乎只在POST请求有效

3.后端拦截特殊字符

4.解决方案

1.前端限制传入特殊字符

2.后端拦截特殊字符-正则表达式

java 复制代码
  public static void main(String[] args) {
        String text = "Hello%World";
        boolean hasSpecialChar = text.matches(".*[%].*");
        if (hasSpecialChar) {
            System.out.println("字符串中包含特殊字符%");
        } else {
            System.out.println("字符串中不包含特殊字符%");
        }
    }

.*表示匹配0个或多个字符

%表示匹配字符 %

3.后端拦截特殊字符-拦截器

java 复制代码
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class SpecialCharacterFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化操作
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 获取请求参数
        String parameter = servletRequest.getParameter("param");
        
        // 检查参数中是否带有特殊字符 %
        if (parameter != null && parameter.contains("%")) {
            // 拦截请求
            servletResponse.getWriter().write("请求参数中含有特殊字符 %");
            return;
        }

        // 继续处理请求
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        // 销毁操作
    }
}

5.总结

6.参考

给个三连吧 谢谢谢谢谢谢了

相关推荐
Logintern0922 分钟前
PostgreSQL 的 ORDER BY 多列排序
数据库·postgresql
今天AI了吗1 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
benchmark_cc1 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库1 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H1 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
数据库小学妹1 小时前
为什么MySQL索引用B+树?从存储底层讲透原理
数据库·mysql·b+树·索引优化·磁盘io·数据库原理
许彰午1 小时前
27-AuthService登录链路
java·低代码·架构
泡海椒1 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
BestHeaker1 小时前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes
小智老师PMP1 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理