【mybatis】使用非预编译${}时,用字符串过滤方案,手动拦截SQL注入

本文介绍了在MyBatis中使用非预编译${}时,如何通过字符串过滤来防止SQL注入。文章提供了一种通用的过滤方案,并对相关方法进行了修正和补充,确保大小写匹配。文章最后邀请读者讨论更高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

面对部分必须使用${}来输入参数的情况,需要手动进行拦截而不能使用预编译的手段。

主要需要拦截的为String格式的字符串。

参考这篇博文:防止SQL注入的五种方法

原文的方法似乎写的有错误,我重新整理了一下,并且添加了大小写匹配。

我整理了一个方案:

字符串过滤方案

比较通用的一个方法:
这个函数返回值为真时表示出现敏感字符
(||之间的参数可以根据自己程序的需要添加或删除,下文只是举例)


	public static boolean sql_inj(String str){
		//常见可能导致误判的字符组
		String inj_str = "'|and|exec|insert|select|delete|update|"
				+ "count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
		String inj_stra[] = inj_str.split("\\|");
		//全部转换为小写进行匹配
		String lowStr = str.toLowerCase();
		for (int i=0 ; i < inj_stra.length ; i++ ){
			if (lowStr.indexOf(inj_stra[i]) >= 0){
				System.out.println(inj_stra[i]);
				return true;
			}
		}
		return false;
	}

结语

测试完毕可行。
欢迎讨论其他高效的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值