Ataques de Injeção de Requisição
Se você estiver passando parâmetros $_GET
(ou $_POST
)
para suas consultas, certifique-se de que eles sejam convertidos em strings primeiro.
Os usuários podem inserir matrizes associativas em solicitações GET e POST, que podem se tornar
consultas indesejadas.
Um exemplo bastante inócuo: suponha que você esteja procurando informações de um usuário
com a solicitação http://www.example.com?username=bob.
Sua aplicação cria a consulta
$q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ])
.
Alguém poderia subverter isso obtendo
http://www.example.com?username[$ne]=foo, que o PHP
transformará magicamente em um array associativo, transformando sua consulta em
$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] )
,
que retornará todos os usuários não nomeados "foo" (todos os seus usuários, provavelmente).
Este é um ataque bastante fácil de se defender: certifique-se de que os parâmetros $_GET e $_POST sejam do tipo que você espera antes de enviá-los ao banco de dados. O PHP tem a função filter_var() para ajudar nisso.
Observe que esse tipo de ataque pode ser usado com qualquer interação de banco de dados que localize um documento, incluindo atualizações, inclusões, exclusões e comandos findAndModify.
Consulte » a documentação principal para obter mais informações sobre problemas semelhantes à injeção de SQL com o MongoDB.