mybatis的xml配置中使用${}可能发生SQL注入,应使用#{}
来源:互联网 发布:php中tr什么意思 编辑:程序博客网 时间:2024/04/29 16:44
项目中遇到了这样的情况,在页面的文本域输入一堆某表的编号,每行是一个编号,用这些编号在后台查询数据库表的code字段。
比如输入的编号是:
AAA
BBB
CCC
错误示范:
从前台页面获得参数后,参数用\n分割,加好双引号和逗号,最后拼成一个类似”AAA”,”BBB”,”CCC”的字符串,在xml配置中使用 code in (${codeArray})的形式把字符串传给数据库,就像这样:
<if test="codeArray !=null">code in (${codeArray})</if>
处理之后的sql大概是这样的:
select * from table where code in (”AAA”,”BBB”,”CCC”);
存在的问题:可能出现sql注入
比如:如果在文本域输入的内容是123") or true or (id=",最后拼成的sql就会是这样的:
select * from table where code in (“123”)or true or (id=””);
查询的结果会是表内所有的记录。
建议的方式:使用#{},列表的情况可以用mybatis的<foreach>标签来配合,比如这样:
<if test="codeArray !=null"> code in <foreach collection="codeArray" item="item" index="index"open="(" close=")" separator=","> #{value} </foreach></if>
这种方式最后处理的结果是这样的:
select * from tablewhere code in
(
?
)
[" 123\") or true or(id=\""]
不会查询出所有的结果,避免了SQL注入。
所以,能用#{}就不要用${}了。
0 0
- mybatis的xml配置中使用${}可能发生SQL注入,应使用#{}
- 使用xml配置Mybatis
- mybatis简单sql使用java注解而不是xml配置
- MyBatis之使用XML配置SQL映射(一)
- myBatis中xml配置方式使用constructo配置字段
- mybatis的xml中使用foreach
- 注入工具中使用的SQL注入语句
- Mybatis SQL中XML运算操作符使用
- 在OA 中应避免使用的PL/SQL语句
- 如何解析Mybatis xml文件中配置的sql
- mybatis xml中使用in的sql长度超过1000的解决办法
- Mybatis中sql in的使用
- mybatis中动态sql的使用
- MyBatis动态SQL中trim的使用
- mybatis在xml文件中配置sql
- Spring中使用MyBatis的简单配置
- mybatis中使用延迟加载的配置
- springboot+springmvc+mybatis 使用xml文件来写增查改的sql
- HDU1312 深搜 red and black
- STL——map的用法
- zepto跨域ajax无法带cookie的问题
- 为什么要源码编译
- matlab中去掉矩阵重复行并且不改变原顺序
- mybatis的xml配置中使用${}可能发生SQL注入,应使用#{}
- 杭电2027 统计元音
- Eclipse下Python插件(pydev)的安装
- 【算法】子数组和的问题总结
- Android-如何开发一个功能强大的ImagePicker
- Spring4.x官方参考文档中文版——第21章 Web MVC框架(30)
- 用户空间和内核空间、进程上下文和中断上下文
- 模拟器的错误缓存,会造成编译失败
- MySQL5.7 JSON实现简介