मुझे विशेष रूप से सुरक्षा के मामले में एक ही समस्या है और मुझे यहां समाधान मिला ।
मेरी समस्या यह थी कि, मैं एक विन्यास फाइल के साथ bash में एक परिनियोजन स्क्रिप्ट लिखना चाहता था जो इस तरह से कुछ पथ को कंटेंट करती हो।
################### Config File Variable for deployment script ##############################
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"
मौजूदा समाधान में "SOURCE" कमांड का उपयोग होता है और इन वैरिएबल के साथ कॉन्फिगर फाइल को इम्पोर्ट करता है। 'SOURCE पाथ / टू / फाइल' लेकिन इस सॉल्यूशन में कुछ सुरक्षा समस्या है, क्योंकि खट्टी फाइल में बैश स्क्रिप्ट कुछ भी हो सकती है। इससे सुरक्षा के मुद्दे पैदा होते हैं। जब कोई स्क्रिप्ट आपकी कॉन्फ़िगर फ़ाइल को सोर्स कर रही होती है, तो एक मैलीकॉइस व्यक्ति मनमानी कोड "निष्पादित" कर सकता है।
कुछ इस तरह की कल्पना करें:
################### Config File Variable for deployment script ##############################
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"; rm -fr ~/*
# hey look, weird code follows...
echo "I am the skull virus..."
echo rm -fr ~/*
इसे हल करने के लिए, हम NAME=VALUE
उस फ़ाइल में केवल निर्माण की अनुमति देना चाहते हैं (चर असाइनमेंट सिंटैक्स) और शायद टिप्पणियाँ (हालांकि तकनीकी रूप से, टिप्पणियां महत्वहीन हैं)। तो, हम egrep
समतुल्य कमांड का उपयोग करके विन्यास फाइल की जांच कर सकते हैं grep -E
।
इस तरह से मैंने इस मुद्दे को हल किया है।
configfile='deployment.cfg'
if [ -f ${configfile} ]; then
echo "Reading user config...." >&2
# check if the file contains something we don't want
CONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
if egrep -q -iv "$CONFIG_SYNTAX" "$configfile"; then
echo "Config file is unclean, Please cleaning it..." >&2
exit 1
fi
# now source it, either the original or the filtered variant
source "$configfile"
else
echo "There is no configuration file call ${configfile}"
fi