Si está pasando parámetros de $_GET (o $_POST)
a sus consultas, asegúrese de que primero se conviertan a strings. Los usuarios
pueden insertar arrays asociativos en peticiones GET y POST, lo que podría
convertirse en consultas no deseadas con operadores $-.
Un ejemplo bastante inocuo: supongamos que está buscando la información de un
usuario con la petición http://www.example.com?username=bob.
Su aplicación crea la consulta
$q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ]).
Alguien podría subvertir esto mediante
http://www.example.com?username[$ne]=foo, que PHP
convertirá mágicamente en un array asociativo, convirtiendo su consulta en
$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] ),
lo que devolverá todos los usuarios que no se llamen "foo" (probablemente todos sus usuarios).
Este es un ataque bastante fácil de defender: asegúrese de que los parámetros de $_GET y $_POST sean del tipo que espera antes de enviarlos a la base de datos. PHP tiene la función filter_var() para ayudar con esto.
Tenga en cuenta que este tipo de ataque puede usarse con cualquier interacción con la base de datos que localice un documento, incluyendo actualizaciones, upserts, eliminaciones y comandos findAndModify.
Consulte » la documentación principal para obtener más información sobre problemas similares a la inyección SQL con MongoDB.