源配置文件避免任何执行

时间:2017-09-29 07:33:21

标签: bash shell

我正在开发一个程序来处理用户在WebInterface中请求的bash请求。为了给用户灵活性,他们可以为每个作业指定几个参数,最后请求保存在具有特定名称的文件中,因此bash脚本可以执行请求的任务。

最后这个文件填充如下:

ENVIRONMENT="PRO"
INTEGRATION="J050_provisioning"
FILE="*"
DIRECTORY="out"

因此bash脚本将获取此文件以执行用户请求的所需任务。到目前为止,它的工作效果很好,但如果用户输入恶意数据,我会发现存在安全问题,例如:

SOMEVAR="GONNAHACK $(rm -f some_important_file)"
OTHERVAR="DANGEROUZZZZZZ `while :; do sleep 10 & done`"

在获取文件时会导致不良影响:)。有没有办法防止源文件执行任何代码但是变量初始化?或者唯一的方法就是 grep 源文件,然后才能检查它是否有危险?

1 个答案:

答案 0 :(得分:1)

只是不要采购它。使其成为由name=value行组成的配置文件(不带双引号),读取每个名称/值对并为name赋值。为了不覆盖PATH等关键变量,请在名称前加上CONF_

原始代码:

while IFS='=' read -r conf_name conf_value; do
    printf -v "CONF_$conf_name" '%s' "$conf_value" \
    || echo "Invalid configuration name '$conf_name'" >&2
done < your_configuration_file.conf

测试它的工作原理:

$ echo "${!CONF_*}"
CONF_DIRECTORY CONF_ENVIRONMENT CONF_FILE CONF_INTEGRATION CONF_OTHERVAR CONF_SOMEVAR

$ printf '%s\n' "$CONF_SOMEVAR"
GONNAHACK $(rm -f some_important_file)