나는 보안의 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 스크립트가 포함 할 수있는 모든 것이 포함될 수 있으므로 보안 문제가 있습니다. 보안 문제가 발생합니다. Malicicios 사용자는 스크립트가 구성 파일을 소싱 할 때 임의의 코드를 "실행"할 수 있습니다.
이런 식으로 상상해보십시오.
################### 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