java处理sql注入方法——sql转义

昨天被扫描出来sql注入问题,之前以为已经解决了,没想到还是出现了。

网上现有方法:

1、preparestatement

由于每次执行都需要prepare,所以不推荐使用

2、一个单引号变成两个

replace("","")
其他的字符串替代方法有着局限性,就不列举了。

我最开始使用的是2方法,但是还是有方法可以破解。

后来参考php的addslashes函数,写了一个java的escapeSql方法,如下:

public static String escapeSql(String str) {
		if (str == null) {
			return null;
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < str.length(); i++) {
			char src = str.charAt(i);
			switch (src) {
			case :
				sb.append("");// hibernate转义多个单引号必须用两个单引号
				break;
			case ":
			case \:
				sb.append(\);
			default:
				sb.append(src);
				break;
			}
		}
		return sb.toString();
	}

经测试,已修复sql注入问题。
经验分享 程序员 微信小程序 职场和发展