MongoDB如何解决SQL或Query注入问题?

参与4

1同行回答

lxuelxue数据库管理员某互联网公司
BSON 当客户端程序在 MongoDB 中组合一个查询时,它会构建一个 BSON 对象 ,而不是一个字符串。因此传统的 SQL 注入攻击并不是问题。更多细节和一些细微差别如下。MongoDB 将查询表示为 BSON 对象。通常, 客户端驱动库 提供了一个方便,无注入的过程来构建这些对象。考虑以...显示全部

BSON
当客户端程序在 MongoDB 中组合一个查询时,它会构建一个 BSON 对象 ,而不是一个字符串。因此传统的 SQL 注入攻击并不是问题。更多细节和一些细微差别如下。

MongoDB 将查询表示为 BSON 对象。通常, 客户端驱动库 提供了一个方便,无注入的过程来构建这些对象。考虑以下 C ++ 示例:

BSONObj  my_query  =  BSON ( “name”  <<  a_name  ); 

auto_ptr < DBClientCursor >  cursor  =  c.query (“tutorial.persons” , my_query );

示例中, my_query 的值可能是例如 {name:”Joe”} 。如果包含特殊字符,例如 ,:和 { ,查询根本不会匹配上任何文档。例如,用户无法劫持查询并将其转换为删除。

JavaScript注意:
您可以通过在命令行上传递 –noscripting 选项 或在配置文件中设置 security.javascriptEnabled 来禁用 JavaScript 的所有服务器端执行功能 。

所有以下 MongoDB 操作都允许您直接在服务器上运行任意 JavaScript 表达式:
· $where
·mapReduce
· group
在这些情况下,您必须小心谨慎,以防止用户提交恶意 JavaScript 。

幸运的是,您可以在没有 JavaScript 的 MongoDB 中表达大多数查询,对于需要 JavaScript 的查询,您可以在单个查询中混合使用 JavaScript 和非 JavaScript 。将所有用户提供的字段直接放在 BSON 字段中,并将 JavaScript 代码传递给该 $where 字段。

如果需要在 $where 子句中传递用户提供的值,则可以使用 CodeWScope 机制转义这些值。当在作用域文档中将用户提交的值设置为变量时,可以避免在数据库服务器上执行它们。

收起
互联网服务 · 2020-01-02
浏览1792

提问者

yeliye
数据库管理员某农信
擅长领域: 数据库大数据服务器

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2019-12-31
  • 关注会员:2 人
  • 问题浏览:2855
  • 最近回答:2020-01-02
  • X社区推广