Hibernate使用中防止SQL注入的几种方案

Hibernate使用中防止SQL注入的几种方案

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免SQL注入:

   1.对参数名称进行绑定:

Query query=session.createQuery(hql);
query.setString(“name”,name);

    2.对参数位置进行邦定:

Query query=session.createQuery(hql);
query.setString(0,name1);
query.setString(1,name2);
...

    3.setParameter()方法:

Query query=session.createQuery(hql);
query.setParameter(“name”,name,Hibernate.STRING);

    4.setProperties()方法:

Entity entity=new Entity();
entity.setXx(“xx”);
entity.setYy(100);
Query query=session.createQuery(“from Entity c where c.xx=:xx and c.yy=:yy ”);
query.setProperties(entity);

  5.HQL拼接方法,这种方式是最常用,而且容易忽视且容易被注入的,通常做法就是对参数的特殊字符进行过滤,推荐大家使用 Spring工具包的StringEscapeUtils.escapeSql()方法对参数进行过滤:

public static void main(String[] args) {
  String str = StringEscapeUtils.escapeSql("'");
  System.out.println(str);
}

输出结果:''

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 深入理解hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别,比如瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象.但是大家又是否对hibernate的session的那几个特殊方法一清二楚呢?或者说大家是否能够一眼就快速看出一个测试用例在反复的调用sess

  • java中hibernate二级缓存详解

    Hibernate的二级缓存 一.缓存概述 缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数据是数据存储源中数据的拷贝.缓存的物理介质通常是内存 hibernate中提供了两个级别的缓存 第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存.这一级别的缓存由 hibernate 管理的,一般情况下无需进行干预 第二级别的缓存是 S

  • Spring Boot + Jpa(Hibernate) 架构基本配置详解

    1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + hibernate + Druid + MySQL + servlet(jsp) 不废话,直接上代码 一.maven的pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu

  • 解决hibernate+mysql写入数据库乱码

    hibernate.cfg.xml加上属性. <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property> mysql 的驱动用3.0.15以上版本的, 加个Filter, 使用UTF-8字符集就可以了, 若使用Spring则写在spring中的s

  • Hibernate识别数据库特有字段实例详解

    Hibernate识别数据库特有字段实例详解 前言: Hibernate已经为绝大多数常用的数据库数据类型提供了内置支持,但对于某些数据库的专属字段支持就不够好了. 这些特殊数据类型往往提供了比常规数据类型更好的数据表达能力,更符合我们的业务场景.比如PostgreSQL的Interval类型,可以非常方便的保存一个时间段的数据. 本文以添加Interval类型支持为例,说明为Hibernate添加特有数据类型支持的方法. Hibernate提供了丰富的数据类型支持,但对于部分数据库专有的数据类

  • Java事务管理学习之Spring和Hibernate详解

    环境与版本 本文出来之前的一篇文章中的hibernate的相关lib 外 Java事务管理之Hibernate 还需要加入spring的lib 包和如下的一些依赖包 org.aopalliance org.aspectj org.apache.commons Spring 的版本是Spring 4.1.5. 依赖包也可以到Spring 官方网站下载到 ,名字类似 spring-framework-3.0.2.RELEASE-dependencies 理论知识 Spring和Hibernate整合

  • hibernate中的增删改查实现代码

    第一个我们首先看看增,增在SQL里面就是insert,也就是插入,在hibernate中,我们只需要,操纵一个对象进行sava,然后再commit事务,就能实现插入功能,下面给大家具体看看代码,持久类我就不再写了,里面也就是与数据库中的字段要一一对应的东西,要有set,get方法,我直接就写的怎么调用save方法. //导入所需的包 import org.hibernate.HibernateException; import org.hibernate.Session; import org.

  • 详解 hibernate mapping配置

    详解 hibernate mapping配置 每个hibernate只会启动的时候引入一个文件,那就是:hibernate.cfg.xml mapping需要我们在hibernate中引入, <mapping resource="com/hibernate/test/hibernate_IP.xml"/> <mapping class="com.hibernate.test.Student"/> 代码片段: <?xml version=

  • struts2+spring+hibernate分页代码[比较多]第1/7页

    dao层接口: Java代码 复制代码 代码如下: package com.last999.im.news.dao; import java.util.*; import com.last999.im.news.entity.KindEntity; import com.last999.im.news.web.PageTool; public interface KindEntityDao{ public KindEntity get(String uuid); public void save

  • Hibernate使用中防止SQL注入的几种方案

    Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免SQL注入:    1.对参数名称进行绑定: Query query=session.createQuery(hql); query.setString("name",name);     2.对参

  • SQL注入的四种防御方法总结

    目录 前言 限制数据类型 正则表达式匹配传入参数 函数过滤转义 预编译语句 总结 前言 最近了解到安全公司的面试中都问到了很多关于SQL注入的一些原理和注入类型的问题,甚至是SQL注入的防御方法.SQL注入真的算是web漏洞中的元老了,著名且危害性极大.下面这里就简单的分享一下我总结的四种SQL注入防御手段,加深理解,方便下次遇到这种问题时可以直接拿来使用.(主要是怕面试中脑壳打铁,这种情况太常见了) SQL注入占我们渗透学习中极大地一部分,拥有这很重要的地位.随着防御手段的不段深入,市面上存在

  • .Net防sql注入的几种方法

    防sql注入的常用方法: 1.服务端对前端传过来的参数值进行类型验证: 2.服务端执行sql,使用参数化传值,而不要使用sql字符串拼接: 3.服务端对前端传过来的数据进行sql关键词过来与检测: 着重记录下服务端进行sql关键词检测: 1.sql关键词检测类: public class SqlInjectHelper:System.Web.UI.Page { private static string StrKeyWord = "select|insert|delete|from|count(

  • 有效防止SQL注入的5种方法总结

    sql注入入门 SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入漏洞存在的原因,就是拼接 SQL 参数.也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞. 演示下经典的SQL注入 我们看到:select id,no from user where id=2; 如果该语句是通过sql字符串拼接得到的,比如: String sql = "select id,no from user where id=" +

  • 深入了解SQL注入

    1 .什么是sql注入(Sql injection)? Sql注入是一种将sql代码添加到输入参数中,传递到Sql服务器解析并执行的一种攻击手法 2. 怎么产生的? Web开发人员无法保证所有的输入都已经过滤 攻击者利用发送给Sql服务器的输入数据构造可执行的Sql代码 数据库未做相应的安全配置 3.如何寻找sql漏洞? 识别web应用中所有输入点 了解哪些类型的请求会触发异常?(特殊字符"或') 检测服务器响应中的异常 4. 如何进行SQL注入攻击? 数字注入: Select * from t

  • 浅谈三种数据库的 SQL 注入

    目录 SQL 注入原理 SQL 注入分类 1. 数字型注入 2. 字符型注入 3. 其他类型 常见数据库的注入 SQL Server MySQL Oracle SQL 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统. SQL 注入分类 1. 数字型注入 当输入的参数为整型时,则有可能存在数字型注入漏洞. 假设存在一条

  • mybatis防止SQL注入的方法实例详解

    SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见.究其原因不外乎:No patch for stupid.为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn

  • 有效防止sql注入的方法演示

    前言 SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQL Injection,即SQL注入. 一 背景 假如某高校开发了一个网课系统,要求学生选课后完成学习,数据库中有一张表course,这张表存放

  • 如何有效防止sql注入的方法

    SQL注入攻击是黑客对数据库进行攻击常用的手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想获取的数据,这就是所谓的SQL Injection,即SQL注入. 一 背景 假如某高校开发了一个网课系统,要求学生选课后完成学习,数据库中有一张表course,这张表存放着每个

  • 实例讲解MyBatis如何防止SQL注入

     SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见.究其原因不外乎:No patch for stupid.为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn

随机推荐