【项目问题解决】% 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.参考 给个三连吧 谢谢谢谢谢谢了 ![在这里插入图片描述](https://file.jishuzhan.net/article/1738301990221385729/3b20c54b775dc1777e424c8498578049.webp)

相关推荐
会编程的土豆5 小时前
MySQL DDL(数据定义语言)总结
数据库·mysql·oracle
zhoutongsheng5 小时前
SQL利用子查询实现复杂条件排序_嵌套逻辑实现业务规则
jvm·数据库·python
一直有一个ac的梦想5 小时前
cmu15445 2025fall lec15 query optimiaztion Pt1
java·服务器·数据库
郝学胜-神的一滴5 小时前
干货版《算法导论》03:动态数组 × 链表的极致平衡艺术
java·数据结构·c++·python·算法·链表
2301_766283445 小时前
如何在 Go 中使用 gocql 执行本地 CQL 脚本文件
jvm·数据库·python
dFObBIMmai5 小时前
MongoDB防注入攻击指南
jvm·数据库·python
彳亍1015 小时前
如何解决Oracle启动ORA-00119错误_网络服务名与listener相关性
jvm·数据库·python
SamDeepThinking5 小时前
IntelliJ IDEA 中有什么让你相见恨晚的技巧?
java·后端·程序员
weixin_459753945 小时前
c++怎么编写多线程安全的跨平台文件日志库_无锁队列与异步IO【附源码】
jvm·数据库·python
夏恪5 小时前
如何用 IDBKeyRange 范围匹配检索特定区间的本地数据
jvm·数据库·python