[英]Prevent against SQL Injection - mybatis and spring
是否存在以防止agains SQL注入的好办法mybatis
?
我正在使用它与spring-boot
。 实际上,我在查询中使用用户给出的字符串参数。
有任何想法吗?
通常,您应该考虑使用#{}
进行字符串替换而不是${}
。
这是因为#{}
导致Mybatis创建一个preparedStatement ,它会阻止SQLInjection与${}
相比,这会将未修改的字符串注入SQL。
MyBatis的清楚地解释它的文档在同一个位置 。 (字符串替换部分)
您还可以参考此博客 ,其中提供了有关使用mybatis进行字符串替换以及如何停止SQLInjection的示例。
@Bandi Kishore是绝对正确的,为了补充他的回答,我认为值得解释为什么预备语句本质上阻止SQLInjection的原因,正如本文中大大解释的那样
基本上SQL服务器引擎将编译您的查询字符串,然后替换其参数。
使用字符串替换进行查询:如果已传递已替换参数的查询字符串,则编译的查询代码将包含编译为有效SQL命令的恶意代码。
使用占位符查询:另一方面,如果查询字符串只有占位符,SQL服务器引擎将首先使用占位符编译代码,那么它将使用提供的值替换占位符(此时插入恶意代码)但是,由于恶意代码未编译,因此SQL Server引擎将其视为纯数据,从而防止了恶意攻击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.