- 主题:使用mybatis就不会有注入漏洞么?
还得码农要用对吧。
1、比如#和$有区别。#{}是预编译,可以;${}不能。
https://aijishu.com/a/1060000000008622
https://blog.csdn.net/jqq_apple/article/details/50421103
2、尽量用下面这种,而不是自己拼串。
userExample.or().andDisplayNameLike("%" + keyword + "%");
userExample.or().andOrgLike(keyword + "%");
userExample.or().andStatusLike("%" + keyword + "%");
userExample.or().andIdLike(keyword + "%");
https://www.anquanke.com/post/id/190170
3、这帖子尾部也有总结
Always use MyBatis annotated mappers
Use the SqlProviderAdapter utility class in conjunction with the MyBatis provider annotations (@InsertProvider, @SelectProvider, etc.)
https://mybatis.org/mybatis-dynamic-sql/docs/howItWorks.html
--
FROM 123.118.64.*
对啊,如果最终传给Prepared Statement的createStatement()的语句也是用用户输入拼出来的话,
即使是用了Prepared Statement,也救不了。
典型误用:
PreparedStatement stmt = conn.createStatement("INSERT INTO students VALUES('" + user + "')");
stmt.execute();
user的值为:
Sam'); DROP TABLE students;--
【 在 canper 的大作中提到: 】
: 别说#$点问题了,用了mybatis还拼sql的也大把
--
修改:z16166 FROM 123.118.64.*
FROM 123.118.64.*
补充一下:
即使用了prepared statement,也防止不了sql wildcard attack,需要自己过滤wildcard字符。
--
FROM 123.118.64.*
是Denial of Service,会搞垮服务器
【 在 canper 的大作中提到: 】
: 这个一般问题不大,也就多查一点数据,用到like查询的一般不是关键查询项,不至于产生越权问题,顶多是数据和用户预期不一致。
:
--
FROM 123.118.64.*