Si on passe des paramĂštres $_GET (ou $_POST)
aux requĂȘtes, il faut s'assurer de convertir en chaĂźnes de caractĂšres avant.
Les utilisateurs peuvent insĂ©rer des tableaux associatifs dans les requĂȘtes
GET et POST, qui pourraient alors devenir des requĂȘtes $ indĂ©sirables.
Un exemple assez anodin : supposez qu'on cherche les informations d'un
utilisateur avec la requĂȘte http://www.example.com?username=bob.
L'application crĂ©e la requĂȘte
$q = new \MongoDB\Driver\Query( [ 'username' => $_GET['username'] ]).
Cela fonctionne bien, mais quelqu'un pourrait subvertir cela en passant
http://www.example.com?username[$ne]=foo, que PHP
transformera magiquement en un tableau associatif, transformant la requĂȘte en
$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] ),
qui renverra tous les utilisateurs dont le nom n'est pas "foo" (tous les utilisateurs, probablement).
C'est une attaque assez facile Ă contrer : il faut s'assurer que les paramĂštres
$_GET et $_POST sont du type attendu
avant d'envoyer à la base de données. PHP dispose de la fonction
filter_var() pour aider.
Ă noter que ce type d'attaque peut ĂȘtre utilisĂ© avec n'importe quelle interaction avec la base de donnĂ©es qui localise un document, y compris les mises Ă jour, les upserts, les suppressions et les commandes findAndModify.
Voir » la documentation principale pour plus d'informations sur les problÚmes de type injection SQL avec MongoDB.