Saya memiliki masalah yang sama khususnya dalam masalah keamanan dan saya menemukan solusinya di sini .
Masalah saya adalah, saya ingin menulis skrip penempatan di bash dengan file konfigurasi yang berisi beberapa jalur seperti ini.
################### 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"
Solusi yang ada terdiri dari menggunakan perintah "SOURCE" dan mengimpor file konfigurasi dengan variabel ini. 'SOURCE path / to / file' Tetapi solusi ini memiliki beberapa masalah keamanan, karena file yang bersumber dapat berisi apa saja yang dapat dilakukan oleh skrip Bash. Itu menciptakan masalah keamanan. Orang malicicios dapat "mengeksekusi" kode arbitrer ketika skrip Anda mengambil file konfig.
Bayangkan sesuatu seperti ini:
################### 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 ~/*
Untuk mengatasi ini, Kami mungkin hanya ingin mengizinkan konstruk dalam formulir NAME=VALUE
di file itu (sintaks penugasan variabel) dan mungkin komentar (meskipun secara teknis, komentar tidak penting). Jadi, Kami dapat memeriksa file konfigurasi dengan menggunakan egrep
perintah yang setara dengan grep -E
.
Inilah cara saya menyelesaikan masalah.
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