java项目中使用拼接字符串传入sql语句时防止sql注入过滤方法

今天写一个判断,用到sql语句拼接,这种方法存在sql注入风险,如图:

这是就需要字符过滤了:

目的就是把客户端request请求中的特殊字符过滤掉,即把键盘上英文和中文字符过滤掉!当然就要一个一个打出来了,代码如下:

比如控制层拿到这username(用户名)、address(用户地址)、phoneNo(联系电话)等:

private void query(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 设置字符集
		resp.setCharacterEncoding("UTF-8");
		req.setCharacterEncoding("UTF-8");
		System.out.println("query方法");

		String username = req.getParameter("username");
		String address = req.getParameter("address");
		String phoneNo = req.getParameter("phoneNo");
		// 过滤特殊字符,防止sql注入
		username = username == null ? ""
				: username.replaceAll("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()—-|{}【】‘;:”“’。,、?]", "");
		address = address == null ? ""
				: address.replaceAll("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()—-|{}【】‘;:”“’。,、?]", "");
		phoneNo = phoneNo == null ? ""
				: phoneNo.replaceAll("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()—-|{}【】‘;:”“’。,、?]", "");

		List list = userService.query(username, address, phoneNo);
		System.out.println(list);
		req.setAttribute("userList", list);// 把结果集放到req的属性空间里面
		req.getRequestDispatcher("/main.jsp").forward(req, resp);// 把整个req和resp注入jsp页面

	}

自己一个个键盘上英文、汉字打了一遍,测试可用!

控制台打印:特殊字符被过滤。

本文由 尤里1号 作者:debug 发表,其版权均为 尤里1号 所有,文章内容系作者个人观点,不代表 尤里1号 对观点赞同或支持。如需转载,请注明文章来源。
7

发表评论