CyberGlossary

攻击与威胁

NoSQL 注入

别称: NoSQLi

定义

针对文档型、键值型或图数据库的注入攻击,攻击者将运算符或 JavaScript 注入到查询对象中。

NoSQL 注入针对 MongoDB、CouchDB、DynamoDB、Redis 等使用基于 JSON、BSON 或内嵌 JavaScript 的查询语言的数据库。攻击者不是逃逸字符串,而是篡改查询结构,例如发送 {"$ne": null} 或 {"$where": "..."} 等运算符以绕过身份验证、导出文档或在服务端执行 JavaScript。动态语言(PHP、Node.js)中的自动对象反序列化使得用户输入直接成为查询 DSL 的一部分,攻击因此更易实施。防御措施包括严格的输入类型与模式校验、拒绝用户提供的运算符、使用参数化客户端 API、禁用服务端 JavaScript,以及为数据库角色配置最小权限。

示例

  • 向 MongoDB 登录接口提交 {"username": "admin", "password": {"$ne": ""}} 以绕过密码校验。
  • 通过 {"$where": "sleep(5000) || true"} 利用时间差异枚举数据。

相关术语