source
isteğe bağlı kod yürüteceğinden güvenli değildir. Bu sizin için bir sorun olmayabilir, ancak dosya izinleri yanlışsa, dosya sistemi erişimi olan bir saldırganın, başka bir güvenlikli komut dosyası tarafından yüklenen bir yapılandırma dosyasına kod enjekte ederek ayrıcalıklı bir kullanıcı olarak kod yürütmesi mümkün olabilir. init betiği.
Şimdiye kadar tanımlayabildiğim en iyi çözüm, beceriksiz yeniden keşif çözümü:
myscript.conf
password=bar
echo rm -rf /
PROMPT_COMMAND='echo "Sending your last command $(history 1) to my email"'
hostname=localhost; echo rm -rf /
Kullanarak source
, echo rm -rf /
çalışan kullanıcının değiştirmesinin yanı sıra, iki kez de çalışır $PROMPT_COMMAND
. Bunun yerine, şunu yapın:
myscript.sh (Bash 4)
#!/bin/bash
typeset -A config # init array
config=( # set default values in config array
[username]="root"
[password]=""
[hostname]="localhost"
)
while read line
do
if echo $line | grep -F = &>/dev/null
then
varname=$(echo "$line" | cut -d '=' -f 1)
config[$varname]=$(echo "$line" | cut -d '=' -f 2-)
fi
done < myscript.conf
echo ${config[username]} # should be loaded from defaults
echo ${config[password]} # should be loaded from config file
echo ${config[hostname]} # includes the "injected" code, but it's fine here
echo ${config[PROMPT_COMMAND]} # also respects variables that you may not have
# been looking for, but they're sandboxed inside the $config array
myscript.sh (Mac / Bash 3 uyumlu)
#!/bin/bash
config() {
val=$(grep -E "^$1=" myscript.conf 2>/dev/null || echo "$1=__DEFAULT__" | head -n 1 | cut -d '=' -f 2-)
if [[ $val == __DEFAULT__ ]]
then
case $1 in
username)
echo -n "root"
;;
password)
echo -n ""
;;
hostname)
echo -n "localhost"
;;
esac
else
echo -n $val
fi
}
echo $(config username) # should be loaded from defaults
echo $(config password) # should be loaded from config file
echo $(config hostname) # includes the "injected" code, but it's fine here
echo $(config PROMPT_COMMAND) # also respects variables that you may not have
# been looking for, but they're sandboxed inside the $config array
Kodumda bir güvenlik açığı bulursanız lütfen yanıtlayın.