Geralmente, com MongoDB não estamos construindo a partir de consultas SQL, logo ataques SQL Injection não são um problema.
No MongoDB as consultas são representados como BSON. Normalmente a linguagem de programação oferece uma maneira conveniente de construir estes objetos que está livre da injeção. Qualquer caracter especial não afetará o banco pois ele será apenas uma string.
Javascript
Alguns cuidados são apropriados quando utilizando Javascript. Por exemplo, quando usando o $ em uma consulta, não concatenar fornecido usuário declaração de dados para compilar o código Javascript, o que seria análogo a uma vulnerabilidade de injeção SQL. Felizmente, a maioria das consultas em MongoDB pode ser expresso sem Javascript. Além disso, podemos misturar os dois modos. É uma boa idéia para fazer todos os campos fornecidos pelo usuário ir direto para um campo BSON.
Você pode usar db.eval () com valores fornecidos usuário, você pode usar o CodeWScope ou você pode fornecer argumentos extras para sua função. Algo como: function (db.eval (userVal ){…}, user_value); Isto irá assegurar que você obterá user_value enviadas como dados em vez de código.
As vezes é útil construir um objeto BSON onde a chave é fornecida pelo usuário. Nessas situações, as chaves precisam ter substituições. O usuário pode enviar uma $ valor com a_chave.meu_objeto onde {$algo: “coisas”}. Então podemos ver alguns casos:
- Inserindo. Inserção no banco de dados não fará nenhum dano. Nós não estamos executando esse objeto como uma consulta, estamos inserindo os dados no banco de dados.
- Update. Atualização (consulta, obj) permite $ operadores no domínio obj. $ Onde não é suportado em atualização. Alguns operadores são possíveis, que manipulam o documento único – assim, as chaves devem ser escapadas.
- Consultando. Geralmente este não é um problema, como por (x: user_obj), cifrões não são de nível superior e não ter nenhum efeito. Em teoria, pode-se deixar o usuário criar uma consulta completamente dele e fornecê-la ao banco de dados. Nesse caso, a verificação por $ nas chaves é importante. No entanto, isso seria um caso muito raro.
Artigo semi traduzido de http://www.mongodb.org/pages/viewpage.action?pageId=7209106