在HQL order by子句中处理SQL注入

时间:2011-01-19 14:51:52

标签: java hibernate hql sql-order-by code-injection

是否有一种简单的方法来处理Hibernate HQL order by子句中的SQL注入。命名参数显然不起作用。

修改

随意发布处理此问题的方法。我希望看到其他人的解决方案并从他们那里传授。

感谢您的任何建议和解决方案。

3 个答案:

答案 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保护的线程。