스크립트에서 외부 입력을 평가하는 'eval'의 불안정성을 어떻게 처리합니까?

스크립트에서 외부 입력을 평가하는 'eval'의 불안정성을 어떻게 처리합니까?

바이너리 얼룩말 라고

스크립트는 외부 입력을 평가하는데 이는 매우 안전하지 않은 방식입니다.

eval평가 스크립트에서 외부 입력을 처리하거나 대체할 수 있는 방법이 있습니까 ?

감사해요.

답변1

에 전달된 인수가 외부 입력에서 나온 것이 아닌지 확인하세요 eval. 그렇지 않으면 사전에 삭제했습니다.

다음과 같이 하지 마세요.

n=0
....
n=$((n + 1))
eval "var$n=$1"

$n아래에당신의통제, 내용은 $1그렇지 않습니다. 예를 들어, 그렇다면 $1eval은 해석할 코드를 수신한 다음 다시 시작합니다.foo;rebootvar3=foo;reboot

사용:

eval "var$n=\$1"

그러면 반대로 eval받게 될 것입니다 var3=$1. 좋은 일입니다.

eval "$1=\$2"

또한 틀릴 수도 있습니다. 보장해야 할 것은 콘텐츠가 $1허용 가능한 값 집합(위생 처리됨)에서만 나오는 것입니다.

unset -v var1 foo bar
case $1 in
  (var1 | foo | bar) eval "$1=\$2";;
  (*) echo >&2 unexpected variable name; exit 1;;
esac

이것은 임의의 코드를 평가하는 유일한 명령 이 아니며 , ,,,,,,,,,,,, 등 다른 것들이 똑같이 조심 해야하는 일부 쉘에도 많은 다른 코드 가 eval있습니다 .shperlawksedreadexporttypesetprintftest[

관련 정보