Qu'est-ce que Injection SQL ?
Attaque qui exploite une application web qui construit des instructions SQL en concaténant simplement les saisies des utilisateurs : la saisie sert à changer le sens de la commande pour manipuler la base de données sans autorisation. Les requêtes préparées avec paramètres substituables (placeholders) sont la contre-mesure fondamentale.
Nom japonais: SQLインジェクション
« Injection SQL » apparaît dans 3 questions d'entraînement réparties sur 1 thèmes, dont Bases de la sécurité de l'information.
Domaine: Bases de la sécurité de l'information
Fonctionnement de l'attaque
Si une application construit une instruction SQL en concaténant des chaînes comme « … WHERE name = ' », la valeur saisie et « ' », une apostrophe dans la saisie ferme la chaîne, et ce qui suit est interprété comme des commandes SQL. Avec la saisie classique ' OR '1'='1, la condition toujours vraie « ou '1' est égal à '1' » est ajoutée, ce qui permet de contourner l'authentification. L'attaque peut aussi conduire à la lecture, à la modification ou à la suppression de données.
Questions fréquentes
Peut-on empêcher l'injection SQL par l'échappement ?
L'échappement peut l'empêcher dans certains cas, mais il faut traiter sans omission toutes les règles propres à chaque type de base de données et à chaque codage des caractères, et une seule faille suffit à faire réussir l'attaque. Les requêtes préparées avec paramètres substituables sont donc la contre-mesure de base.
Peut-on empêcher l'injection SQL en limitant la longueur des saisies ?
Non. Même des chaînes courtes peuvent changer le sens d'une commande. Les limites de longueur ou de types de caractères sont des mesures complémentaires ; la contre-mesure fondamentale reste les requêtes préparées.