Entry № 863
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 逃逸接口。
● 示例
- 01
Rails 应用使用 User.where("name = '#{params[:q]}'"),从 ORM 暴露 SQL 注入。
- 02
Sequelize 端点接受攻击者可控的 order 参数并直接传入 Op.literal。
● 常见问题
ORM 注入 是什么?
针对使用对象关系映射器(ORM)的应用的注入攻击,通过动态查询、批量赋值或原生 SQL 逃逸接口篡改数据访问。 它属于网络安全的 攻击与威胁 分类。
ORM 注入 是什么意思?
针对使用对象关系映射器(ORM)的应用的注入攻击,通过动态查询、批量赋值或原生 SQL 逃逸接口篡改数据访问。
如何防御 ORM 注入?
针对 ORM 注入 的防御通常结合技术控制与运营实践,详见上方完整定义。
ORM 注入 还有哪些其他名称?
常见的别称包括: HQL 注入, JPQL 注入。