Dans un langage de programmation, j'exécute une simple commande shell
cd var; echo > create_a_file_here
avec var étant une variable qui contient une chaîne (espérons-le) d'un répertoire à l'endroit où je veux créer le fichier "create_a_file_here". Maintenant, si quelqu'un voit cette ligne de code, il est possible de l'exploiter en affectant par exemple:
var = "; rm -rf /"
Les choses peuvent devenir assez laides. Une façon d'éviter le cas ci-dessus serait peut-être de rechercher dans la chaîne dans var des caractères spéciaux comme ';' avant d'exécuter la commande shell, mais je doute que cela couvre tous les exploits possibles.
Est-ce que quelqu'un connaît un bon moyen de s'assurer que "cd var" ne change qu'un répertoire et rien d'autre?
sh
ou créez-vous votre propre langage de programmation avec une syntaxe similaire mais qui se développe var
au lieu de vous obliger à écrire cd "$var"
? Ou est-ce bash
avec shopt -s cdable_vars
? Oh, je pense que vous voulez dire qu'un autre programme bifurque un shell pour exécuter ces commandes. Alors citez juste var
, mais assurez-vous qu'il n'inclut pas de caractère de citation lui-même ...
s='"'; echo "$s"
impressions "
.
var=untrusted string
dans le programme parent, tout var
comme une variable d'environnement qui est déjà définie lors de l'appel sh
. Ensuite, il vous suffit de le citer chaque fois que vous le développez, ce qui est possible de manière fiable. Ah, je vois que cette idée fait déjà partie de la réponse de Stéphane>. <
var
comme argument. Par exemple , appelersh
avec des arguments-c
,'cd "$1"; echo > create_a_file_here'
,'sh'
,var
travaux et n'a pas besoin de changements àvar
. L''sh'
argument est transmis sous la forme$0
.