Si se pasan parámetros $_GET
(o $_POST
)
a las consultas, asegúrese de convertirlos en strings antes.
Los usuarios pueden insertar arrays asociativos en las consultas
GET y POST, que podrían convertirse en consultas $ no deseadas.
Un ejemplo bastante inofensivo: supongamos que se buscan las informaciones de un
usuario con la consulta http://www.example.com?username=bob.
La aplicación crea la consulta
$q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ])
.
Esto funciona bien, pero alguien podría subvertirlo pasando
http://www.example.com?username[$ne]=foo, que PHP
transformará mágicamente en un array asociativo, transformando la consulta en
$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] )
,
que devolverá todos los usuarios cuyo nombre no es "foo" (todos los usuarios, probablemente).
Este es un ataque bastante fácil de contrarrestar: asegúrese de que los parámetros
$_GET
y $_POST
sean del tipo esperado
antes de enviarlos a la base de datos. PHP dispone de la función
filter_var() para ayudar.
Tenga en cuenta que este tipo de ataque puede ser utilizado con cualquier interacción con la base de datos que localice un documento, incluyendo actualizaciones, upserts, eliminaciones y comandos findAndModify.
Ver » la documentación principal para más información sobre los problemas de tipo inyección SQL con MongoDB.