sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1'='1'”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死板的方式。

mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候当然需要防止sql注入。其实Mybatis的sql是一个具有“输入+输出”功能,类似于函数的结构,如下:
<select id="getBlogById" resultType="Blog" parameterType=”int”>
select id,title,author,content
from blog where id=#{id}
</select>
这里,parameterType标示了输入的参数类型,resultType标示了输出的参数类型。回应上文,如果我们想防止sql注入,理所当然地要在输入参数上下功夫。上面代码中高亮部分即输入参数在sql中拼接的部分,传入参数后,打印出执行的sql语句,会看到sql是这样的:
select id,title,author,content from blog where id = ?
不管输入什么参数,打印出的sql都是这样的。这是因为mybatis启用了预编译功能,在sql执行前,会先将上面的sql发送给数据库进行编译,执行时,直接使用编译好的sql,替换占位符“?”就可以了。因为sql注入只能对编译过程起作用,所以这样的方式就很好地避免了sql注入的问题。
mybatis是如何做到sql预编译的呢?其实在框架底层,是jdbc中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的sql语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行一个sql时,能够提高效率,原因是sql已编译好,再次执行时无需再编译。
话说回来,是否我们使用mybatis就一定可以防止sql注入呢?当然不是,请看下面的代码:
<select id="orderBlog" resultType="Blog" parameterType=”map”>
select id,title,author,content
from blog order by ${orderParam}
</select>
仔细观察,内联参数的格式由“#{xxx}”变为了${xxx}。如果我们给参数“orderParam”赋值为”id”,将sql打印出来,是这样的:
select id,title,author,content from blog order by id
显然,这样是无法阻止sql注入的。在mybatis中,”${xxx}”这样格式的参数会直接参与sql编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式,所以,这样的参数需要我们在代码中手工进行处理来防止注入。
结论:在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。
# mybatis防止sql注入
# mybatis注解动态sql注入map和list方式(防sql注入攻击)
# mybatis防止SQL注入的方法实例详解
# MyBatis下SQL注入攻击的3种方式
# 详解Mybatis框架SQL防注入指南
# Mybatis常用注解中的SQL注入实例详解
# 是一种
# 是这样
# 都是
# 是一个
# 很好
# 都不
# 都要
# 有可能
# 子类
# 不需要
# 要在
# 很高
# 这个时候
# 涉及到
# 这是因为
# 表单
# 类似于
# 能对
# 若不
# 先将
相关文章:
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何配置FTP站点权限与安全设置?
临沂网站制作企业,临沂第三中学官方网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
香港服务器租用费用高吗?如何避免常见误区?
企业微网站怎么做,公司网站和公众号有什么区别?
如何快速搭建高效香港服务器网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
,南京靠谱的征婚网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
建站之星多图banner生成与模板自定义指南
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
打鱼网站制作软件,波克捕鱼官方号怎么注册?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何通过建站之星自助学习解决操作问题?
如何设置并定期更换建站之星安全管理员密码?
Python路径拼接规范_跨平台处理说明【指导】
网站制作难吗安全吗,做一个网站需要多久时间?
专业商城网站制作公司有哪些,pi商城官网是哪个?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何快速搭建FTP站点实现文件共享?
如何快速建站并高效导出源代码?
长沙做网站要多少钱,长沙国安网络怎么样?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站之星如何配置系统实现高效建站?
建站之星好吗?新手能否轻松上手建站?
建站主机SSH密钥生成步骤及常见问题解答?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何自定义建站之星网站的导航菜单样式?
再谈Python中的字符串与字符编码(推荐)
如何用VPS主机快速搭建个人网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
完全自定义免费建站平台:主题模板在线生成一站式服务
,巨量百应是干嘛的?
建站VPS推荐:2025年高性能服务器配置指南
头像制作网站在线制作软件,dw网页背景图像怎么设置?
贸易公司网站制作流程,出口贸易网站设计怎么做?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何在Windows虚拟主机上快速搭建网站?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
高防服务器租用指南:配置选择与快速部署攻略
如何基于云服务器快速搭建网站及云盘系统?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
建站之星后台管理系统如何操作?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
*请认真填写需求信息,我们会在24小时内与您取得联系。