前言
Secure Code Warrlor是一个代码审计的练习平台。
一、SQL注入练习(3)
1.漏洞点为:
2.解决方案:
3.总结
1)Hibernate是一种ORM框架,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象。
2)在hibernate中最好使用 saveOrUpdate() 方法将实体保存到数据库中,而不是连接字符串,这样可以有效防止SQL注入。
3)saveOrUpdate()方法作用:这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。
二、SQL注入练习(4)
1.漏洞点为:
2.解决方案:
3.总结
1)可见使用了Hibernate框架,此时应注意是否使用了setParameter(),setProperties(),setEntity()等方法做参数绑定来预防SQL注入,查看是否有SQL语句直接拼接了。
2)Hibernate框架三个绑定方法:
setEntity()方法 : 把参数与一个持久化类的实例绑定。
例如:setEntity()方法把“customer”命名参数与一个Customer对象绑定
session.createQuery("from Order o where o.customer = :customer")
.setEntity("customer",customer).list();
setParameter()方法:绑定任意类型的参数。
Query query = session.createQuery( " from Order o where o.id=:id and o.orderNumber like :orderNumber");
query.setParameter(" id" , 1);
// query.setParameter(" orderNumber",orderNumber,Hibernate.STRING); //hibernate 3.0的写法。
query.setParameter(" orderNumber",orderNumber, StringType.INSTANCE); //hibernate 4.2的写法
setProperties() 方法:用于把参数名称与一个对象的属性值绑定。
Customer c=new Customer();
c.setName("Tom");
c.setAge(20);
Query query =session.createQuery(" from Customer as c where c.name = : name and c.age = :age")
query.setProperties(c) ;
3)可见此处没有对SQL语句做参数绑定,造成了SQL注入