休眠和 SQL 注入

Posted

技术标签:

【中文标题】休眠和 SQL 注入【英文标题】:Hibernate and SQL injection 【发布时间】:2017-07-26 07:30:13 【问题描述】:

我已经看到一些讨论通过命名参数来防止 SQL 注入的主题,但是 hibernate 语句怎么样

currentSession().update(object);

currentSession().save(object)?

这些安全吗?或者总是使用命名参数更安全,比如

currentSession().createQuery("update Object set field=:field where id=:id").setParameter("field", field).setParameter("id", id).executeUpdate()?

【问题讨论】:

【参考方案1】:

它们是安全的,Hibernate 将绑定变量用于实体 CRUD 语句。为每个实体缓存语句,以避免每次需要时都创建它们,并且在执行时只提供绑定的变量值。

您可以enable SQL logging查看生成的SQL。

【讨论】:

以上是关于休眠和 SQL 注入的主要内容,如果未能解决你的问题,请参考以下文章

使用休眠防止 SQL 注入

检索数据的几个sql请求(休眠)

休眠查询(不是 SQL)日志记录

休眠sql错误1146

休眠 SQL 错误:17002,SQLState:空 Io 异常:连接重置

休眠和使用数据库索引会在 CockroachDB 上创建 SQL 语法错误