bash가 xargs 명령을 무시하고 기록하도록 만드는 방법은 무엇입니까?

bash가 xargs 명령을 무시하고 기록하도록 만드는 방법은 무엇입니까?

내 코드는 다음과 같습니다

echo "$result" | xargs -P50 -I@ bash -c '{ printf "@ $(curl --write-out "%{http_code}" -L -s --output /dev/null @)\n"; }'

여기에는 result다음과 유사한 목록이 포함되어 있습니다.

https://example.com/somepath
https://example.com/somepath&quot
https://example.com/anotherpath?par1&par4=gg

예상 출력 [URL 상태 코드]

https://example.com/somepath 200
https://example.com/somepath&quot 200
https://example.com/anotherpath?par1&par4=gg 200

문제는 이 코드 조각을 실행할 때 bash: quot: No such file or directoryandsign으로 구분된 오류가 발생 &하고 이를 해결할 수 없다는 것입니다.

@작은따옴표/큰따옴표로 둘러싸려고 했지만 아무 효과가 없었습니다.

답변1

명령 문자열에 포함된 대체 기능으로 인해명령 주입 취약점. 이는 작업에서 볼 수 있는 내용입니다. curl의 내용은 result사용된 문자열 인수뿐만 아니라 코드로 구문 분석됩니다.

이를 방지하려면 다음을 사용할 수 있습니다(주요 문제에만 초점을 맞추고 다른 개선도 가능함).

printf '%s\n' "$result" | xargs -P50 -I@ bash -c 'printf "%s %s\n" "$1" \
  "$(curl --write-out "%{http_code}" -L -s --output /dev/null "$1")"' mybash @

관련 정보