Aller au contenu

Injection arithmétique

Injection arithmétique (en anglais arithmetic injection) : exécution de commandes provoquée par l'évaluation arithmétique de Bash appliquée à une donnée externe. Dans (( )), $(( )), let, les indices de tableaux indexés et les comparaisons -eq, -lt... de [[ ]], Bash évalue un nom de variable comme une expression ; si la donnée lue vaut a[$(commande)], la substitution de commande placée dans l'indice est exécutée au moment même du calcul ou du test.

La parade consiste à valider la forme de toute valeur venue de l'extérieur (argument, fichier, variable d'environnement) avant le moindre usage arithmétique, par exemple [[ $n =~ ^[0-9]+$ ]], et à écrire 10#$n pour éviter qu'un zéro en tête ne la fasse lire en octal. La commande [ (test), qui ne fait pas d'évaluation arithmétique, refuse simplement une telle valeur. Bash 5.2 n'évalue plus deux fois les indices de tableaux associatifs, mais l'injection par la valeur d'une variable reste possible.

Dans les cours

Voir aussi