浅谈mybatis中的#和$的区别 以及防止sql注入的方法

 更新时间:2016年10月21日 09:50:17   投稿:jingxian  
下面小编就为大家带来一篇浅谈mybatis中的#和$的区别 以及防止sql注入的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
  
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.
  
3. #方式能够很大程度防止sql注入。
  
4.$方式无法防止Sql注入。


5.$方式一般用于传入数据库对象,例如传入表名.
  
6.一般能用#的就别用$.

防止Sql注入

注意:SQL语句不要写成select * from t_stu where s_name like '%$name$%',这样极易受到注入攻击。

”${xxx}”这样格式的参数会直接参与sql编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式。

在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。

例子

<sql id="condition_where">  
  <isNotEmpty property="companyName" prepend=" and ">  
    t1.company_name like #companyName#  
  </isNotEmpty>  
</sql> 

java代码和你原来的差不多,其实也没什么不好,你要觉得麻烦 把判断null和'%'封装到一个方法里就可以了

if (!StringUtil.isEmpty(this.companyName)) {  
  table.setCompanyName("%" + this.companyName + "%");  
} 

以上就是小编为大家带来的浅谈mybatis中的#和$的区别 以及防止sql注入的方法全部内容了,希望大家多多支持脚本之家~

相关文章

  • SpringBoot日志配置操作全面介绍

    SpringBoot日志配置操作全面介绍

    日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节。但是,这丝毫不影响它在任何一个系统中的重要的地位,这篇文章主要介绍了SpringBoot日志配置
    2022-10-10
  • MAC 系统如何使用 Sublime Text 2 直接编译运行 java 代码

    MAC 系统如何使用 Sublime Text 2 直接编译运行 java 代码

    这篇文章主要介绍了MAC 系统如何使用 Sublime Text 2 直接编译运行 java 代码,需要的朋友可以参考下
    2014-10-10
  • Java控制流程示例代码详解

    Java控制流程示例代码详解

    这篇文章主要介绍了Java控制流程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Java使用迭代器Iterator遍历集合

    Java使用迭代器Iterator遍历集合

    Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。本文就来和大家详细聊聊Java如何使用迭代器Iterator实现遍历集合,感兴趣的可以跟随小编一起学习一下
    2022-12-12
  • Mybatis返回值(resultType&resultMap)的具体使用

    Mybatis返回值(resultType&resultMap)的具体使用

    返回值属性有两种设置,一种是resultType,一种是resultMap,本文主要介绍了Mybatis返回值(resultType&resultMap)的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Sentinel自定义异常的三种实现方式

    Sentinel自定义异常的三种实现方式

    Spring Cloud Alibaba Sentinel 是目前主流并开源的流量控制和系统保护组件,Spring Cloud Alibaba Sentinel 有 3 种自定义异常的实现方式,本文小编将通过代码示例给大家详细的介绍这三种实现方式,需要的朋友可以参考下
    2023-11-11
  • idea springboot 修改css,jsp不重启实现页面更新的问题

    idea springboot 修改css,jsp不重启实现页面更新的问题

    这篇文章主要介绍了idea springboot 修改css,jsp不重启实现页面更新的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 详解Mybatis核心类SqlSessionFactory的构建

    详解Mybatis核心类SqlSessionFactory的构建

    这篇文章主要为大家详细介绍了Mybatis核心类SqlSessionFactory的构建过程,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • SpringMVC中RequestContextHolder获取请求信息的方法

    SpringMVC中RequestContextHolder获取请求信息的方法

    这篇文章主要介绍了SpringMVC中RequestContextHolder获取请求信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java中BIO、NIO、AIO的理解

    Java中BIO、NIO、AIO的理解

    这篇文章主要为大家详细介绍了Java中BIO、NIO、AIO的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论