source
यह सुरक्षित नहीं है क्योंकि यह मनमाना कोड निष्पादित करेगा। यह आपके लिए चिंता का विषय नहीं हो सकता है, लेकिन यदि फ़ाइल की अनुमति गलत है, तो फाइल सिस्टम के साथ हमलावर के लिए यह संभव हो सकता है कि कोड को एक विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में कोड को निष्पादित करने के लिए एक अन्यथा सुरक्षित स्क्रिप्ट जैसे भरी हुई फ़ाइल द्वारा लोड की गई एक कॉन्फ़िगर फ़ाइल के रूप में हो। init स्क्रिप्ट।
अब तक, सबसे अच्छा समाधान जिसकी पहचान करने में मैं सक्षम हूं, वह है अनाड़ी पुनर्निवेश-द-व्हील समाधान:
myscript.conf
password=bar
echo rm -rf /
PROMPT_COMMAND='echo "Sending your last command $(history 1) to my email"'
hostname=localhost; echo rm -rf /
का उपयोग करते हुए source
, यह echo rm -rf /
दो बार चलेगा , साथ ही साथ चल रहे उपयोगकर्ता को बदल देगा $PROMPT_COMMAND
। इसके बजाय, यह करें:
myscript.sh (बैश 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 (मैक / बैश 3-संगत)
#!/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
कृपया जवाब दें कि क्या आपको मेरे कोड में कोई सुरक्षा शोषण मिला है।