1

사용자가 제어하는 ​​URL의 일부로 서버 응용 프로그램에서 wget을 호출해야합니다. 내가 서버 응용 프로그램에 setenv()을 사용하여 환경 변수 URL에 인수를 저장하는 경우에, 나는 $URL 어떤 방식으로 확장되지하고의 일부로서 전적으로 해석되어 있다고 가정 할 수 있습니다환경 변수를 통한 인수 전달은 완전히 안전합니까?

wget somehost/"$URL" 

갈래 쉘에서 실행 URL? Bourne 쉘과 호환 가능합니까 (예 : Ubuntu에서 이 아니라 bash)?

+0

서버 응용 프로그램에서 wget을 어떻게 실행합니까? 'system()'사용하기? – Jens

+0

큰 따옴표 붙은 변수는 POSIX 호환 쉘에서 확장하거나 해석해서는 안됩니다. – PSkocik

+0

예상되는 문제 : 1. 스폰 된 쉘이'.bashrc '를 제공하면 존재하는 경우 거기에'URL'을 가져옵니다. 2. 'URL'이 다른 여러 프로세스를 생성하면 그 중 일부 프로세스가 잘못된 'URL'을 가져올 수 있습니다. – alvits

답변

0

셸은 명령을 호출 (fork/execs)하기 전에 $URL의 매개 변수 확장을 수행합니다. 매개 변수가 큰 따옴표로 묶여 있으므로 단어 분리가 수행되지 않고 "somehost/whatever URLs expands"가 하나의 인수가됩니다.

결과는 다른 사용자에게 ps(1) 출력에 command + args로 표시 될 수 있습니다.

또한 시스템의 ps(1) 구현이 환경을 표시하기 위해 -e을 지원하면 (예 : FreeBSD에서) 환경 변수에 저장된 데이터가 표시 될 수 있습니다.

질문이있는 경우 액세스 자격 증명과 같은 중요한 정보를 숨길 수 있습니까? 대답은 일반적으로 "아니오"입니다.

+0

저는 명령 주입에만 관심이 있습니다. 그래서 올바르게 이해한다면 괜찮습니다. –