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.

add a note

User Contributed Notes

There are no user contributed notes for this page.