## Attaques par injection de requêtes

Si vous passez des paramètres `$_GET` (ou `$_POST`) à vos requêtes, assurez-vous de les 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 que vous cherchez les informations d'un utilisateur avec la requête http://www.example.com?username=bob. Votre 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 votre requête en `$q = new \MongoDB\Driver\Query( [ 'username' => [ '$ne' => 'foo' ] ] )`, qui renverra tous les utilisateurs dont le nom n'est pas "foo" (tous vos utilisateurs, probablement).

C'est une attaque assez facile à contrer : assurez-vous que les paramètres `$_GET` et `$_POST` sont du type attendu avant de les envoyer à la base de données. PHP dispose de la fonction filter_var() pour vous aider.

Notez 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.