## Attaques par injection de requêtes

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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open