Java / Hibernate Criteria查询API是否可以防止注入?

时间:2017-04-07 01:45:15

标签: java hibernate persistence criteria hibernate-criteria

这可能是一个愚蠢的问题,但我没有在文档中看到任何明确说明标准查询是参数化的,或者在引擎盖下注入保护。

换句话说,下面的谓词是否容易受到注入攻击?如果是这样,我该如何解决?查看文档我没有看到任何参数化选项或任何类似的选项。

criteriaBuilder.like(
    root.get("prop"),
    "%"+userInput+"%"
)

2 个答案:

答案 0 :(得分:1)

是的,hibernate正在使用标准*

的参数化查询

确认这一点的最简单方法是激活sql日志记录(将org.hibernate.SQL类设置为DEBUG),然后你将看到hibernate生成的查询(并获取参数值,激活日志类别) :org.hibernate.type到TRACE级别。)

*在标准中你可以手工编写sql部分(使用Restrictions.sqlRestriction("..."))。如果您正在编写易于在其中进行sql注入的SQL,那么您的条件查询也将受其约束。

答案 1 :(得分:1)

是的。

使用Criteria API与使用参数化PreparedStatements相同。您唯一需要谨慎的是不要连接查询字符串,或者它是否真的需要非常小心。

相关问题