Hibernate Criteria Api 是不是完全防止 SQL 注入

Posted

技术标签:

【中文标题】Hibernate Criteria Api 是不是完全防止 SQL 注入【英文标题】:Does Hibernate Criteria Api completely protect from SQL InjectionHibernate Criteria Api 是否完全防止 SQL 注入 【发布时间】:2013-02-10 12:48:48 【问题描述】:

我正在使用 Hibernate 来保护我的网站免受 SQL 注入。

听说 Hibernate Criteria API 比 HQL 更强大。 Hibernate Criteria Api 是否完全防止 SQL 注入?

【问题讨论】:

【参考方案1】:

是的,确实如此。

Criteria API 以及 HQL 或 JPQL 中的查询参数都对参数进行了转义,并且不会执行恶意 SQL。

仅当您简单地将参数连接到查询中时,才会暴露该漏洞。然后任何恶意 SQL 都会成为您查询的一部分。

编辑 OWASP 具有SQL injection prevention cheatsheet。使用条件查询相当于防御选项 1:使用准备好的语句。

【讨论】:

结论是什么。标准 API 是否完全保护我的网站免受 SQL 注入? @яєηנιтн.я 抱歉听起来没有定论。是的,确实如此。 @яєηנιтн。结论是:不要连接 String 来创建您的查询。使用 API。 kostja, Ralf Hoppen:感谢宝贵的 cmets 看来HQL容易出现HQL注入,和SQL注入一样不安全。 dineshonjava.com/hibernate/…

以上是关于Hibernate Criteria Api 是不是完全防止 SQL 注入的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Criteria API - 过滤集合属性

Hibernate Criteria API:获取 n 个随机行

(懒惰)使用 Hibernate Criteria API 的 LEFT OUTER JOIN

Criteria API JPA Hibernate:外键上的不同选择

如何使用 JPA Criteria API / Hibernate 按 Case 语句分组

使用Criteria API的Hibernate向数据库发送了太多查询