在mybatis中有没有防止SQL注入的好方法?
我在与spring-boot的连接中使用它。实际上,我在查询中使用的是用户给定的字符串参数。
有什么想法吗?
发布于 2017-03-04 06:08:39
通常,您应该考虑使用#{}而不是${}进行字符串替换。
这是因为#{}会导致Mybatis创建一个preparedStatement,与将未修改的字符串注入到SQL中的${}相比,它会阻止SQLInjection。
Mybatis在其文档here中清楚地解释了这一点。(字符串替换部分)
您还可以参考此blog,其中提供了使用mybatis替换字符串以及如何停止SQLInjection的示例。
发布于 2017-03-04 06:28:09
@Bandi Kishore是绝对正确的,为了补充他的回答,我认为有必要解释为什么准备好的语句本质上会阻止SQLInjection,正如本article中所详细解释的那样
基本上,SQL服务器引擎将编译您的查询字符串,然后替换其参数。
使用字符串替换的查询:如果您传递的查询字符串已经带有替换的参数,那么编译后的查询代码将包含编译为有效命令的恶意代码。
使用占位符的查询:另一方面,如果查询字符串只有占位符,SQL server引擎将首先使用占位符编译代码,然后它将用提供的值替换占位符(此时插入恶意代码),但是,由于恶意代码未编译,因此SQL server引擎将其视为纯数据,从而防止了恶意攻击。
https://stackoverflow.com/questions/42589041
复制相似问题