文档章节

Mybatis防止sql注入

吹比龙
 吹比龙
发布于 2016/03/17 10:04
字数 381
阅读 2128
收藏 3

#{xxx},使用的是PreparedStatement,会有类型转换,所以比较安全;

${xxx},使用字符串拼接,可以SQL注入;

like查询不小心会有漏动,正确写法如下:

Mysql: select * from t_user where name like concat('%', #{name}, '%')      

Oracle: select * from t_user where name like '%' || #{name} || '%'      

SQLServer: select * from t_user where name like '%' + #{name} + '%'

关于上述结论可以在xml中验证

1、select * from test where id = #{id}

随便传个id执行后可以在日志中看到如下结果

select * from test where id = ?

原理是采用了jdbc中的PreparedStatement,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的sql语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行一个sql时,能够提高效率,原因是sql已编译好,再次执行时无需再编译。

2、select * from test order by ${list}

随便传个参数例如id执行后可以在日志中看到如下结果

select * from test order by id

这种是字符串拼接的,存在sql注入隐患

在mybatis中,”${xxx}”这样格式的参数会直接参与sql编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式,所以,这样的参数需要我们在代码中手工进行处理来防止注入。

所以尽量用#{}这种方式传参数,如果用到了${}方式要手动过滤sql注入。





© 著作权归作者所有

吹比龙
粉丝 11
博文 135
码字总数 38713
作品 0
合肥
程序员
私信 提问
加载中

评论(1)

B
Bosco-Li
’ --
mybatis中#{}与${}的差别(如何防止sql注入)

默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。 #相当于对数据 加上 双引号,$相当于...

码代码的小司机
2018/10/07
0
0
Mybatis 防止SQL注入笔记

#{xxx},使用的是PreparedStatement,会有类型转换,所以比较安全; ${xxx},使用字符串拼接,可以SQL注入; like查询不小心会有漏洞,正确写法如下: Mysql: select * from t_user where na...

超级大黑猫
2016/08/31
17
0
MyBatis如何防止SQL注入

MyBatis如何防止SQL注入 SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL injection - Wikip...

优惠券发放
2018/05/02
0
0
java持久层框架mybatis如何防止sql注入

sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应...

思维80
2016/04/15
175
0
mybatis中如何防止sql注入

SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL injection - Wikipedia SQL注入,大家都不陌...

writeademo
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员分享placeholder属性详解

  好程序员分享placeholder属性详解,HTML5里新引入很多有趣的新特征;有些体现在HTML里,有些是JavaScript API,全部非常的有用。其中我最喜欢的一个特征就是文本框(INPUT)里的placehold...

好程序员IT
30分钟前
0
0
[学]ngin反向代理搭建与配置

Nginx安装地址:https://www.cnblogs.com/wyd168/p/6636529.html (linux) 必须安装的4个包: nginx-1.1.10.tar.gz openssl-1.0.1t.tar.gz pcre-8.39.tar.gz zlib-1.2.11.tar.gz ng配置主要......

覃光林
33分钟前
1
0
互联网商城的上云改造之旅

在中国,经过十年的发展,云计算产业已走过概念普及的1.0时期,进入“上云”和落地的2. 0阶段,企业上云意识不断增强,越来越多的企业选择部署多云和混合IT。 如今,云计算生态一片繁荣,看似...

zhaowei121
34分钟前
0
0
fastJson 一些小例子

package com.*;import com.alibaba.fastjson.annotation.JSONField;public class VO { @JSONField(name="ID") private int id; public int getId() { ......

qimh
48分钟前
1
0
十年后,程序员的工资还能达到现在的水平吗?

一方面,程序员的门槛正在逐渐消失,因为计算机相关专业毕业生一年比一年多; IT 培训班出来的学生一年比一年多;网络上各种编程课程,也正在帮助无数人零基础转型软件开发…… 另一方面,程...

爱编程的浪子
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部