私は特にセキュリティのcasで同じ問題を抱えており、ここで解決策を見つけました。
私の問題は、このようなパスを含む構成ファイルを使用して、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 path / to / file'しかし、ソースファイルには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"; 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