首页 / 更多教程 / mybatis模糊查询防止SQL注入
mybatis模糊查询防止SQL注入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mybatis模糊查询防止SQL注入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2537字,纯文字阅读大概需要4分钟。
内容图文
)SQL:
<select id="getInfo2" resultType="cn.xm.exam.bean.haul.Haulinfo" parameterType="hashmap"> SELECT * FROM haulinfo <where> <if test="name != null"> and bigname like ‘%${name}%‘ </if> <if test="status != null"> and bigStatus = #{status} </if> </where> </select>
Java测试:
本来是模糊查询名字,结果对描述添加了过滤。
@Test public void test2() throws SQLException { Map condition = new HashMap(); condition.put("name", "%‘ and bigdescription like ‘阳城"); condition.put("status", "未开始"); testMapper.getInfo2(condition); }
Preparing: SELECT * FROM haulinfo WHERE bigname like ‘%%‘ and bigdescription like ‘阳城%‘ and bigStatus = ?
Parameters: 未开始(String)
Total: 2
2. bind + #{} 模糊查询 防止SQL注入 (#{}进行预编译,传递的参数不进行编译,只作为参数,相当于PreparedStatement)
bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:
<select id="selectBlogsLike" resultType="Blog"> <bind name="pattern" value="‘%‘ + _parameter.getTitle() + ‘%‘" /> SELECT * FROM BLOG WHERE title LIKE #{pattern} </select>
SQL:
<select id="getInfo" resultType="cn.xm.exam.bean.haul.Haulinfo" parameterType="hashmap"> SELECT * FROM haulinfo <where> <if test="name != null"> <bind name="names" value="‘%‘+name+‘%‘" /> and bigname like #{names} </if> <if test="status != null"> and bigStatus = #{status} </if> </where> </select>
Java测试:
@Test public void test1() throws SQLException { Map condition = new HashMap(); condition.put("name", "%‘ and bigdescription like ‘阳城"); condition.put("status", "未开始"); testMapper.getInfo(condition); }
Preparing: SELECT * FROM haulinfo WHERE bigname like ? and bigStatus = ?
Parameters: %%‘ and bigdescription like ‘阳城%(String), 未开始(String)
Total: 0
【结论】在编写MyBatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。
#{}:相当于JDBC中的PreparedStatement
${}:是输出变量的值
简单说,#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
如果我们order by语句后用了${},那么不做任何处理的时候是存在SQL注入危险的。你说怎么防止,那我只能悲惨的告诉你,你得手动处理过滤一下输入的内容。如判断一下输入的参数的长度是否正常(注入语句一般很长),更精确的过滤则可以查询一下输入的参数是否在预期的参数集合中。
mybatis模糊查询防止SQL注入
标签:mapper 存在 select 上下 表达式 name 方式 处理 防止
本文系统来源:http://www.cnblogs.com/qlqwjy/p/7818579.html
内容总结
以上是互联网集市为您收集整理的mybatis模糊查询防止SQL注入全部内容,希望文章能够帮你解决mybatis模糊查询防止SQL注入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。