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.

add a note

User Contributed Notes

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