這裡蒐索程式師資訊,查找有用的技術資料
当前位置:首页 » 编程语言 » hibernate拼接sql注入
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hibernate拼接sql注入

发布时间: 2022-05-01 23:10:36

A. hibernate和jdbc是怎么通过问号防止sql注入的

?的个数和标识位是不确定的,这里属于B


A、 按参数名称绑定:

B、 按参数位置邦定:

在HQL查询语句中用”?”来定义参数位置,形式如下:
Queryquery=session.createQuery(“fromUseruserwhereuser.name=?anser.age=?”);
query.setString(0,name);
query.setInteger(1,age);

同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。

注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。

C、 setParameter()方法:

D、 setProperties()方法:

B. hibernate能否防止sql注入

很可惜,如果你是组合hql字符串的话,是防止不了的,要防止的话,也要用占位符,比如
query=session.createQuery("select count(*) from CpUser where id = :id and password = :password");
...
query.setParameter("id".userForm.getId());
...
如果你不想这么做的话,就要自己写一个filter,自动把所有的request参数值处理一下,如特殊字符前加上\,就不会有注入错误了

C. hibernate防止SQL注入的原理是怎么样的

不要。 你的sql或者hql,是拼装的还是prepared传递的(?传递)。 拼出来的,当然需要防注入了。和你用不用hibernate没关系

D. 如何防止SQL注入攻击之java网站安全部署

  • java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数 。下面就举三个例子来说明一下:

  • 第一种:

    采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可,如下所示:

    String sql= "select * from users where username=? and password=?;PreparedStatement preState = conn.prepareStatement(sql);preState.setString(1, userName);preState.setString(2, password);ResultSet rs = preState.executeQuery();...

  • 第二种:

    采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入,如下所示:

    public static String TransactSQLInjection(String str)

    {

    return str.replaceAll(".*([';]+|(--)+).*", " ");

    }

    userName=TransactSQLInjection(userName);

    password=TransactSQLInjection(password);

    String sql="select * from users where username='"+userName+"' and password='"+password+"' "

    Statement sta = conn.createStatement();

    ResultSet rs = sta.executeQuery(sql);

  • 第三种:

    使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。

    在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成如下:

    String queryStr = “from user where username=:username ”+”password=:password”;

    List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();

E. hibernate防止sql 注入,有疑问,求大神指导指导,谢谢

不会的,弄懂SQL注入的原理就知道,SQL注入是通过改变SQL语句的结构来注入,SAVE方法操作的是对象,所以不会有这种问题。

F. java拼接sql怎么防止注入

使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。
在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成:
String queryStr = “from user where username=:username ”+”password=:password”;
List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();

G. 有人遇到过项目中已经使用了hibernate,可是测试的时候依然会被sql注入,请问是怎么回事呢

需要提供具体调用的代码,否则无法判断。
再强大的框架,也不能完全杜绝漏洞,因为框架既要考虑安全性,也要考虑灵活性,数据库的封闭框架,如果严格按照既有的方法生成查询或写入语句,一般是不会有注入漏洞的。但个别地方可能需要灵活拼装查询或更新语句,传入了自拼装的代码,就很可能导致漏洞产生

H. hibernate的sql注入是什么意思能解释透彻一点么

如果在查询字段中输入单引号"'",则会报错,这是因为输入的单引号和其他的sql组合在一起编程了一个新的sql,实际上这就是SQL注入漏洞,后来我在前台和后台都对输入的字符进行了判断。

永远也不要写这样的代码:
String queryString = "from Item i where i.description like '" + searchString + "'";
List result = session.createQuery(queryString).list();
如果用户输入:foo' and callSomeStoredProcere() and 'bar' = 'bar,则你的程序在执行一个简单查询后,还会调用某个存储过程,
这样你的程序就开了一个安全漏洞,如果用户偶尔输入了一个单引号,你的程序就可能报错。

I. 现在有个需求,用的是hibernate,需要在hibernate拦截器中对查询的sql进行where条件拼接

这个写起来很麻烦,提供解决思路。
1、在web.xml里实现拦截器配置。针对于某一个连接跳转的。
2、拦截器功能实现,拿到参数。实现需要反射进行实现,同时要保证线程安全。
3、参数处理放到Session里。
4、在实际SQL语句中查询。

如果跟spring集成的话,建议使用spring的AOP,进行动态代理实现。 进行初期处理。