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.