Mybatis检查SQL注入
Mybatis 的 Mapper.xml 语句中 parameterType 向SQL语句传参有两种方式:#{ } 和 ${ }。
使用#{ }是来防止SQL注入,使用${ }是用来动态拼接参数。
如何排查出
1. 检查是否有$号
如果你使用的是ide代码编辑器,那么可以通过全局搜索${
, 快速定位到使用${ }拼接SQL的语句,在去找到外部传入参数的入口,闭合sql证明即可。
2. 检查是否有order by语句
同样的在搜索是否使用order by
排序语句,如果有一步一步追踪是否有外部参数,未过滤就直接传递到order by语句里面来。
为什么#{ }就安全
#{ } 就类似JDBC的预编译,所以安全。类似如下SQL语句:(JDBC预编译的原理,希望后面能专门去研究一下,并写博文)
- 使用 ${ }效果是:
select * from testtable where id="1" or true or id # 1后面就是被攻击者恶意构造的字符
- 而使用#{ } 的效果是:
select * from testtable where id="1\" or true or id\"" # 1后面就是被攻击者恶意构造的字符
什么情况下用不了#{}
答案是:在order by 排序语句的情况下不行,为什么?
先复习一下order by的用法
order by就是一个排序的工具。
# 这个1就是指第一个列索引,也可以写id (列索引)
select * from testtable ORDER BY 1 ASC #ASC表示按升序排序,DESC表示按降序排序
# 两个代码是一样的
select * from testtable ORDER BY id ASC #ASC表示按升序排序,DESC表示按降序排序
对于order by 我们是用不了#{}的,因为用了这个就会被自动转换成字符串,自动加引号,这样语句就不生效了。
<select id="selectStudentsByName" resultType="Student">
select id,name,age,score from student order by #{column}
</select>
<!--编译出来的结果如下:-->
select * from table order by 'column'
会发现加上“”
双引号符号后,就没法正常排序了。
如何解决:
使用${},MyBatis就不会修改或转义改字符串。但是这样又不安全,会导致潜在的SQL注入攻击。所以我们需要自己去限制,不允许用户输入一些非法字段,通常只使用白名单方式校验。
总结
即使是安全的sql预编译技术,也是有适用范围的,一些应用场景也是不适用的。当我们在做黑盒或者审计的时候,碰到了预编译处理不了的场景,比如说排序功能的时候就得格外注意了,不然被人order by
注入就悲剧了。
Mybatis检查SQL注入的更多相关文章
- 聊一聊MyBatis 和 SQL 注入间的恩恩怨怨
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
- mybatis防止sql注入
SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedi ...
- mybatis 的sql语句及使用mybatis的动态sql mybatis防注入
由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接 :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...
- mybatis 学习笔记(二):mybatis SQL注入问题
mybatis 学习笔记(二):mybatis SQL注入问题 SQL 注入攻击 首先了解下概念,什么叫SQL 注入: SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞. ...
- 【网络安全】SQL注入、XML注入、JSON注入和CRLF注入科普文
目录 SQL注入 一些寻找SQL漏洞的方法 防御SQL注入 SQL注入相关的优秀博客 XML注入 什么是XML注入 预防XML注入 JSON注入 什么是JSON注入 JSON注入的防御 CRLF注入 ...
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...
- sql注入在线检测(sqlmapapi)
版权:http://blog.csdn.net/yueguanghaidao/article/details/38026431 每次看都不方便 摘抄下来 之前一搞渗透的同事问我,sqlmapapi ...
- sql注入在线检測(sqlmapapi)
之前一搞渗透的同事问我.sqlmapapi.py是干啥的,我猜非常多人都玩过sqlmap,但玩过sqlmapapi的应该比較少,今天就和大家一起看看怎样使用以及一些美的地方. 说白了.sqlmapap ...
- SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...
随机推荐
- The 10th Shandong Provincial Collegiate Programming Contest(11/13)
$$The\ 10th\ Shandong\ Provincial\ Collegiate\ Programming\ Contest$$ \(A.Calandar\) 签到 //#pragma co ...
- 【noi 2.7_413】Calling Extraterrestrial Intelligence Again(算法效率--线性筛素数+二分+测时)
题意:给3个数M,A,B,求两个质数P,Q.使其满足P*Q<=M且A/B<=P/Q<=1,并使P*Q最大.输入若干行以0,0,0结尾. 解法:先线性筛出素数表,再枚举出P,二分出对应 ...
- hdu3033 I love sneakers!
Problem Description After months of hard working, Iserlohn finally wins awesome amount of scholarshi ...
- Codeforces Global Round 9 C. Element Extermination (思维,栈)
题意:有一个长度\(n\)的序列,如果\(a_{i}<a_{i+1}\),那么可以选择删除\(a_{i}\)或者\(a_{i+1}\),再继续操作,问是否能够将序列删到只剩一个元素. 题解:感觉 ...
- C - C工程编译那些事【configure-make || cmake-make】
一.cofigure是怎么生成的,我们又是怎么使用的 configure和make install背后的故事: https://azyet.github.io/2015/06/20/configure ...
- 如何自己绘制fcitx4输入法皮肤?
先来给大家看看我自己修改后的结果 当然你可以自己设计,自己定义喜欢的颜色和样式 但是注意,这个教程仅仅针对使用fcitx皮肤面板的输入法,例如rime.sunpinyin等. 搜狗输入法.讯飞输入法. ...
- 记一次 Raven2 渗透(phpmailer漏洞+UDF提权)
目录: 1. 寻找IP 2.dirb目录爆破 2.PHPMailer漏洞反弹得到shell 3.python版本的exp修改 4.查看wordpress的wp-config.php配置文件得到数据库账 ...
- google 人机身份验证
google 人机身份验证 Are you a robot? Introducing "No CAPTCHA reCAPTCHA" https://googleonlinesecu ...
- Object & prototype & __proto__ All In One
Object & prototype & proto All In One js 原型,原型链,原型对象 const obj ={}; // {} const obj = new Ob ...
- Angular 2 for 2017 web full stack development
1 1 1 Angular 2 for 2017 web full stack development 1 1 https://angular2.xgqfrms.xyz/ https://ng2-he ...