- 主题:使用mybatis就不会有注入漏洞么?
还有preparedstatement就一定没事么?
--
FROM 171.116.45.*
上古时代mysql 的驱动据说会用字符串拼接实现prepareStatement……
【 在 threebird (飞剑仙朱亮) 的大作中提到: 】
: 还有preparedstatement就一定没事么?
--
FROM 115.239.231.*
虽然确实有这回事,但印象中驱动会帮你转码。不过我不确定,时代太久远了。
【 在 javafish (这不是一个昵称) 的大作中提到: 】
: 上古时代mysql 的驱动据说会用字符串拼接实现prepareStatement……
--
FROM 61.140.77.*
还得码农要用对吧。
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.*
另外用#还有内存溢出的问题,这样是属于误用引起的,虽然mybatis内部可以用lru来解决这个问题,不过我想了一下,如果是我来做我也不想去解决这个问题。
【 在 z16166 (Netguy) 的大作中提到: 】
: 对啊,如果最终传给Prepared Statement的createStatement()的语句也是用用户输入拼出来的话,
: 即使是用了Prepared Statement,也救不了。
: 典型误用:
: ...................
--
FROM 61.140.77.*
现在很大一个坑就是放着表分区不用土法分表,table_1,_2,_3....
逼你手工拼字符串
也不知道哪儿流行起来的
【 在 z16166 (Netguy) 的大作中提到: 】
: 对啊,如果最终传给Prepared Statement的createStatement()的语句也是用用户输入拼出来的话,
: 即使是用了Prepared Statement,也救不了。
: 典型误用:
: ...................
--
FROM 114.86.46.*
这个还好,拼进去的表名也不会是前端传过来的
【 在 oldwatch (一条叫java的鱼◎城内风光独好) 的大作中提到: 】
: 现在很大一个坑就是放着表分区不用土法分表,table_1,_2,_3....
: 逼你手工拼字符串
: 也不知道哪儿流行起来的
: ...................
--
FROM 61.140.77.*
补充一下:
即使用了prepared statement,也防止不了sql wildcard attack,需要自己过滤wildcard字符。
--
FROM 123.118.64.*