【项目问题解决】% 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.参考

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

相关推荐
木易士心11 分钟前
MyBatis数据源切换全面解析
数据库
AC赳赳老秦16 分钟前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
新中地GIS开发老师20 分钟前
地信职业百科④:GIS开发工程师
前端·数据库·gis·webgis·三维gis开发
笑小枫22 分钟前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程
云和恩墨28 分钟前
从“第二存储”到多智能体协作,云和恩墨充实数据基础设施产品矩阵
数据库
ClouGence34 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
霸道流氓气质35 分钟前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
我不想名字重复38 分钟前
redis缓存和数据库数据保持一致
数据库·redis·缓存
格林威42 分钟前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
独隅1 小时前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea