PHP Conference Kansai 2025

Ataques por inyección de consultas

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.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top