到目前为止,我知道有四种与hibernate进行交易:
那么,关于它们对注射的强度有多强,我认为这些(如果我错了,请纠正我):
我的问题是关于#4,按示例查询,因为我发现它也很脆弱。例如:
Account a = new Account(); //POJO class
a.setId("1' OR '1'='1");
//s is a org.hibernate.Session instance
Criteria crit = s.createCriteria(Account.class);
crit.add(Example.create(a));
List results = crit.list(); //table dump!
该代码段选择整个帐户表。有没有办法预防注射?怎么样?
注意:我正在使用Hibernate 3.6.5 final,测试数据库是HSQLDB。
更新:对我来说似乎也是一个错误,实际上可能与注入的SQL无关。尝试使用不存在的值设置id并返回所有行。尝试使用'5'='5'而不是'1'='1'进行注入,并且5不会传播到SQL调用。它继续使用(1 = 1)作为where子句。
更新2:解决了。请参阅下面的答案。
答案 0 :(得分:1)
Hibernate QBE忽略id(映射到PK)字段。似乎这样做是因为id过滤器只返回一行,这可以通过get()或load()来实现。我想知道如果我想在id ???
上使用类似的条件hibernate官方论坛上的相关帖子:
答案 1 :(得分:0)
您可以清理您的输入例如。在您的代码中,您应该确保为ID字段设置Long值。