是否有一种简单的方法来处理Hibernate HQL order by子句中的SQL注入。命名参数显然不起作用。
修改
随意发布处理此问题的方法。我希望看到其他人的解决方案并从他们那里传授。
感谢您的任何建议和解决方案。
答案 0 :(得分:3)
您可以使用Hibernate条件API而不是HQL。
标准API检查订单标准是否为有效财产。
如果您尝试这样的话:
public void testInjection() {
String orderBy = "this_.type desc, type";
Criteria crit = this.getSession().createCriteria(DemoEntity.class);
crit.addOrder(Order.asc(orderBy));
crit.list();
}
您将获得QueryException: "could not resolve property this_ of de.test.DemoEntity"
由AbstractPropertyMapping抛出。
答案 1 :(得分:1)
我最终找到了我想要避免的解决方案。我已经实现了map,其中key是用户在URL中看到的,而value是DB中的列,这是在ORDER BY子句之后。
答案 2 :(得分:0)
Hibernate使用的PreparedStatement已经针对SQL注入了。在PreparedStatment中,参数绑定到语句,而不是发出纯文本SQL语句。使用hibernate时,您不必担心SQL注入。
这是一个确保hibernate不受SQL注入Click Here保护的线程。