这可能是一个愚蠢的问题,但我没有在文档中看到任何明确说明标准查询是参数化的,或者在引擎盖下注入保护。
换句话说,下面的谓词是否容易受到注入攻击?如果是这样,我该如何解决?查看文档我没有看到任何参数化选项或任何类似的选项。
criteriaBuilder.like(
root.get("prop"),
"%"+userInput+"%"
)
答案 0 :(得分:1)
是的,hibernate正在使用标准*
的参数化查询确认这一点的最简单方法是激活sql日志记录(将org.hibernate.SQL类设置为DEBUG),然后你将看到hibernate生成的查询(并获取参数值,激活日志类别) :org.hibernate.type到TRACE级别。)
*在标准中你可以手工编写sql部分(使用Restrictions.sqlRestriction("...")
)。如果您正在编写易于在其中进行sql注入的SQL,那么您的条件查询也将受其约束。
答案 1 :(得分:1)
是的。
使用Criteria API与使用参数化PreparedStatements相同。您唯一需要谨慎的是不要连接查询字符串,或者它是否真的需要非常小心。