Проверяет ли Mon goose. JS countDocuments () фильтры? - PullRequest
0 голосов
/ 06 января 2020

Функция Mon gooseJS Model.countDocuments() проверяет используемые фильтры? или он подвергается атакам с использованием небезопасных входных данных?

Например,

var mongoose = require('mongoose')

var TestSchema = new mongoose.Schema({
    firstname: String,
    lastname: String,
    job_title: String
})

var Test = mongoose.model('Test', TestSchema)

Test.countDocuments({ job_title: request.body.manager_search })
    .then((result) => { console.log("result: ", result) })
    .catch((err) => { console.log("Error counting documents: ", err) })

Этот код вводит вектор инъекции, или request.body.manager_search будет преобразован в строку этим функция

1 Ответ

1 голос
/ 07 января 2020

Нет, он не будет проверен и не приведен к String.

Пн goose вызывает собственный метод сбора MongoDB countDocuments(query, options)

Если query содержит вектор инжекции ( например job_title: {'$ne':''}, см. ограничения ), MongoDB не предотвратит инъекции в ваше приложение

Пример:

{ job_title:  'foo'  }
result:  2

{ job_title:  { '$ne': '' }  }
result:  3

Решение:

Сложное решение: { job_title: {$in:[request.body.manager_search] } } Хитрое решение2: { job_title: request.body.manager_search + "" } Пн go -санитизировать: https://www.npmjs.com/package/mongo-sanitize

...