首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止SQL注入- mybatis和spring

防止SQL注入- mybatis和spring
EN

Stack Overflow用户
提问于 2017-03-04 05:51:00
回答 2查看 3.5K关注 0票数 2

mybatis中有没有防止SQL注入的好方法?

我在与spring-boot的连接中使用它。实际上,我在查询中使用的是用户给定的字符串参数。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-04 06:08:39

通常,您应该考虑使用#{}而不是${}进行字符串替换。

这是因为#{}会导致Mybatis创建一个preparedStatement,与将未修改的字符串注入到SQL中的${}相比,它会阻止SQLInjection。

Mybatis在其文档here中清楚地解释了这一点。(字符串替换部分)

您还可以参考此blog,其中提供了使用mybatis替换字符串以及如何停止SQLInjection的示例。

票数 6
EN

Stack Overflow用户

发布于 2017-03-04 06:28:09

@Bandi Kishore是绝对正确的,为了补充他的回答,我认为有必要解释为什么准备好的语句本质上会阻止SQLInjection,正如本article中所详细解释的那样

基本上,SQL服务器引擎将编译您的查询字符串,然后替换其参数。

使用字符串替换的查询:如果您传递的查询字符串已经带有替换的参数,那么编译后的查询代码将包含编译为有效命令的恶意代码。

使用占位符的查询:另一方面,如果查询字符串只有占位符,SQL server引擎将首先使用占位符编译代码,然后它将用提供的值替换占位符(此时插入恶意代码),但是,由于恶意代码未编译,因此SQL server引擎将其视为纯数据,从而防止了恶意攻击。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42589041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档