返回lxue的回答

lxuelxue数据库管理员某互联网公司

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
浏览1794

回答者

lxue
lxue006
数据库管理员某互联网公司
擅长领域: 数据库人工智能大数据

lxue 最近回答过的问题

回答状态

  • 发布时间:2020-01-02
  • 关注会员:2 人
  • 回答浏览:1794
  • X社区推广