2017-09-29 13 views
1

私は、WebInterfaceのユーザーから要求されたbashのリクエストを処理するプログラムを開発中です。ユーザーに柔軟性を持たせるために、各ジョブごとにいくつかのパラメーターを指定することができます。最後に、要求は特定の名前のファイルに保管されるため、bashスクリプトは要求されたタスクを実行できます。実行を避けるソース設定ファイル

最後にこのファイルは、次のように満たされている:だからbashスクリプトは、要求された必要なタスクのユーザーを実行するために、このファイルをソースします

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

。ユーザーが悪質なデータを入力した場合、それはこれまでの素晴らしい作品が、私はこれをセキュリティ上の問題を参照してください、のようなもの:ファイルをソース際

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

は、これは望ましくない影響を引き起こします:)。ソースファイルが任意のコードを実行し、変数の初期化を行わないようにする方法はありますか?または、唯一の方法はちょうどgrepソースファイルは危険ではないことを確認する前にソースファイルですか?

答えて

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) 
+0

ありがとうございます!それはかなりうまくいく:) – alphamikevictor

関連する問題