这可能是一个愚蠢的问题,但我没有在文档中看到任何内容明确说明条件查询是参数化的或在幕后以其他方式受到注入(inject)保护。
换句话说,像下面这样的谓词是否直接容易受到注入(inject)攻击?如果是这样,我该如何解决?环顾文档,我没有看到任何参数化选项或类似内容。
criteriaBuilder.like(
root.get("prop"),
"%"+userInput+"%"
)
最佳答案
是的,hibernate 正在使用参数化查询条件*
确认这一点的最简单方法是激活 sql 日志记录(将 org.hibernate.SQL 类别设置为 DEBUG),您将看到 hibernate 生成的查询(并获取参数值,激活日志类别:org .hibernate.type 到 TRACE 级别)。
*在条件中,您可以手动编写 sql 部分(使用 Restrictions.sqlRestriction("...")
)。如果您正在编写容易出现 sql 注入(inject)的 sql,您的标准查询也会受到影响。
关于java - Java/Hibernate Criteria Query API 是否可以防止注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268362/