Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 767

ORM 注入

ORM 注入 是什么?

ORM 注入针对使用对象关系映射器(ORM)的应用的注入攻击,通过动态查询、批量赋值或原生 SQL 逃逸接口篡改数据访问。


ORM 注入发生在攻击者可控的输入,经由 Hibernate、Entity Framework、SQLAlchemy、ActiveRecord、Sequelize、Prisma、Django ORM 等的动态查询 API 进入数据层时。典型脆弱模式包括:HQL/JPQL 字符串拼接、ActiveRecord 的 where(string) 内插、Sequelize 的 Op.literal、SQLAlchemy 的格式化 text()、对未授权字段的批量赋值,以及来自 JSON API 的不安全排序/过滤参数。其影响从传统 SQL 注入延伸到授权绕过和权限提升,尤其在控制逻辑放在 ORM 层时。防御措施:使用参数化的查询构造器;为可排序/过滤的字段维护严格白名单;显式声明可写属性(strong parameters);对不可信输入避免使用原生 SQL 逃逸接口。

示例

  1. 01

    Rails 应用使用 User.where("name = '#{params[:q]}'"),从 ORM 暴露 SQL 注入。

  2. 02

    Sequelize 端点接受攻击者可控的 order 参数并直接传入 Op.literal。

常见问题

ORM 注入 是什么?

针对使用对象关系映射器(ORM)的应用的注入攻击,通过动态查询、批量赋值或原生 SQL 逃逸接口篡改数据访问。 它属于网络安全的 攻击与威胁 分类。

ORM 注入 是什么意思?

针对使用对象关系映射器(ORM)的应用的注入攻击,通过动态查询、批量赋值或原生 SQL 逃逸接口篡改数据访问。

ORM 注入 是如何工作的?

ORM 注入发生在攻击者可控的输入,经由 Hibernate、Entity Framework、SQLAlchemy、ActiveRecord、Sequelize、Prisma、Django ORM 等的动态查询 API 进入数据层时。典型脆弱模式包括:HQL/JPQL 字符串拼接、ActiveRecord 的 where(string) 内插、Sequelize 的 Op.literal、SQLAlchemy 的格式化 text()、对未授权字段的批量赋值,以及来自 JSON API 的不安全排序/过滤参数。其影响从传统 SQL 注入延伸到授权绕过和权限提升,尤其在控制逻辑放在 ORM 层时。防御措施:使用参数化的查询构造器;为可排序/过滤的字段维护严格白名单;显式声明可写属性(strong parameters);对不可信输入避免使用原生 SQL 逃逸接口。

如何防御 ORM 注入?

针对 ORM 注入 的防御通常结合技术控制与运营实践,详见上方完整定义。

ORM 注入 还有哪些其他名称?

常见的别称包括: HQL 注入, JPQL 注入。

相关术语