bash 산술 확장은 주입 공격에 취약한 것으로 보입니다.

bash 산술 확장은 주입 공격에 취약한 것으로 보입니다.

스크립트가 환경에서 변수를 가져오길 원한다고 가정해 보겠습니다.

#!/usr/bin/env bash
set -eu

if (( ${A-} )); then
    echo true
else
    echo false
fi

(empty)여기에서는 산술 확장이 , 0, 1대소문자 또는 기타를 처리하는 데 더 합리적으로 보입니다 .

if [ "${A-}" ] && [ "${A-}" != 0 ]; then

하지만 그 이후에는

$ A='1 - 1' ./1.sh
false
$ A='B = 1' ./1.sh
true

이제 일반적으로 허용하지 않는 변수를 기본적으로 변경할 수 있습니다. 어떤 제안이 있나요? 환경 변수에서 얻은 부울 플래그를 어떻게 처리합니까?

답변1

변수에 int가 포함되어 있는지 확실하지 않은 경우 해당 값을 확인할 수 있습니다.

#!/usr/bin/env bash
set -eu

vint() {
    local v
    for v; do
        if echo "$v" | egrep '[^0-9]' &> /dev/null; then
            printf '%s: %s: not an int\n' "$0" "$v" >&2
            exit 1
        fi
    done
}

vint "${A-}"
if (( ${A-} )); then
    echo true
else
    echo false
fi

이것이 내가 받아들일 수 있는 것입니다.

관련 정보