All'interno di un linguaggio di programmazione, eseguo un semplice comando shell
cd var; echo > create_a_file_here
con var che è una variabile che contiene una stringa di (si spera) una directory nel punto in cui voglio creare il file "create_a_file_here". Ora se qualcuno vede questa riga di codice, è possibile sfruttarla assegnando ad esempio:
var = "; rm -rf /"
Le cose possono diventare piuttosto brutte. Un modo per evitare il caso precedente potrebbe essere quello di cercare nella stringa in var alcuni caratteri speciali come ';' prima di eseguire il comando shell, ma dubito che questo copra tutti i possibili exploit.
Qualcuno conosce un buon modo per assicurarsi che "cd var" cambi solo una directory e nient'altro?
sho stai creando il tuo linguaggio di programmazione con una sintassi simile ma che si espande varinvece di richiedere la scrittura cd "$var"? O è questo bashcon shopt -s cdable_vars? Oh, penso che intendi dire che qualche altro programma crea una shell per eseguire questi comandi. Quindi cita var, ma assicurati che non includa un carattere di citazione stesso ...
s='"'; echo "$s"stampe ".
var=untrusted stringnel programma genitore, quindi varè una variabile d'ambiente che è già impostata quando si richiama sh. Quindi devi solo citarlo ogni volta che lo espandi, il che è possibile fare in modo affidabile. Ah, vedo che l'idea fa già parte della risposta di Stéphane>. <
varcome argomento. Ad esempio, chiamandoshcon argomenti-c,'cd "$1"; echo > create_a_file_here','sh',varopere e non ha bisogno di alcuna modificavar. L''sh'argomento è passato come$0.