日期:2014-05-18  浏览次数:20771 次

hibernatetemplate查询会造成sql注入吗
String hql= "from bean.User u where u.name=? and u.password=?"
  this.getHibernateTemplate().find(hql, new String[]{"test", "123"});


 String queryString = "select count(*) from bean.User u where u.name=:myName and u.password=:myPassword"; 
  String[] paramName= new String[]{"myName", "myPassword"};
  String[] value= new String[]{"xiyue", "123"};
  this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);

会有sql注入漏洞吗?
sql hibernate 数据库 查询 java

------解决方案--------------------
sql语句用字符串拼接的方式会有sql注入风险
------解决方案--------------------
这个没试过,应该是将sql发过去执行的,你自己试一下看看
------解决方案--------------------
还是看你的HQL怎么写  如果HQL中有拼SQL的  还是有可能  如果都是参数的  那不会
------解决方案--------------------
引用:
Quote: 引用:

sql语句用字符串拼接的方式会有sql注入风险

用?或者:字段来赋值字段也会吗?
如:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test");
  或模糊查询:this.getHibernateTemplate().find("from bean.User u where u.name like ?", "%test%");

这样算安全的
------解决方案--------------------
目测你这两种方式不会造成注入漏洞
------解决方案--------------------
引用:
Quote: 引用:

目测你这两种方式不会造成注入漏洞

String hql = "select * from table where username="+username+"and password = "+password;
hibernatetemplate.find(hql);
这种查询应该就会出现sql注入漏洞对吗?
恩呢,这种就会有注入的危险。
------解决方案--------------------
hibernate一般不会造成sql注入