服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - 浅谈mybatis中的#和$的区别 以及防止sql注入的方法

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

2020-06-26 15:27jingxian JAVA教程

下面小编就为大家带来一篇浅谈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注入攻击。

例子

?
1
2
3
4
5
<sql id="condition_where"
  <isNotEmpty property="companyName" prepend=" and "
    t1.company_name like #companyName# 
  </isNotEmpty> 
</sql>

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

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

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

延伸 · 阅读

精彩推荐
  • JAVA教程java实现将数字转换成人民币大写

    java实现将数字转换成人民币大写

    前面给大家介绍过使用javascript,php,c#,python等语言实现人民币大写格式化,这篇文章主要介绍了java实现将数字转换成人民币大写的代码,非常的简单实用...

    hebedich3792019-12-15
  • JAVA教程Java for循环详解

    Java for循环详解

    这篇文章主要介绍了Java for循环方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...

    东边的雨田3712019-06-23
  • JAVA教程java jdk动态代理详解

    java jdk动态代理详解

    动态代理类的Class实例是怎么生成的呢,是通过ProxyGenerator类来生成动态代理类的class字节流,把它载入方法区 ...

    java技术网1672019-10-14
  • JAVA教程spring boot之SpringApplication 事件监听

    spring boot之SpringApplication 事件监听

    这篇文章主要介绍了spring boot之SpringApplication 事件监听,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    posuoren5282019-06-24
  • JAVA教程java运行shell脚本方法示例

    java运行shell脚本方法示例

    利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序 ...

    java教程网5582019-10-24
  • JAVA教程java关键字final使用方法详解

    java关键字final使用方法详解

    在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了。final是java的关键字,本文就详细说明一下他的使用方法 ...

    java教程网3542019-10-21
  • JAVA教程深入解析Java的Hibernate框架中的持久对象

    深入解析Java的Hibernate框架中的持久对象

    Hibernate的持久对象在数据库数据操作中有着重要作用,这里我们就来深入解析Java的Hibernate框架中的持久对象,首先必须从理解持久化对象的生命周期开始: ...

    zhang_xinxiu3522020-05-24
  • JAVA教程Java中5种方式实现String反转

    Java中5种方式实现String反转

    下面小编就为大家带来一篇Java中5种方式实现String反转。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。 ...

    jingxian3662020-05-23