![bash가 xargs 명령을 무시하고 기록하도록 만드는 방법은 무엇입니까?](https://linux55.com/image/189185/bash%EA%B0%80%20xargs%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%AC%B4%EC%8B%9C%ED%95%98%EA%B3%A0%20%EA%B8%B0%EB%A1%9D%ED%95%98%EB%8F%84%EB%A1%9D%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 코드는 다음과 같습니다
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"
https://example.com/anotherpath?par1&par4=gg
예상 출력 [URL 상태 코드]
https://example.com/somepath 200
https://example.com/somepath" 200
https://example.com/anotherpath?par1&par4=gg 200
문제는 이 코드 조각을 실행할 때
bash: quot: No such file or directory
andsign으로 구분된 오류가 발생 &
하고 이를 해결할 수 없다는 것입니다.
@
작은따옴표/큰따옴표로 둘러싸려고 했지만 아무 효과가 없었습니다.
답변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 @