全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Mybatis防止sql注入的实例

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小时内与您取得联系。