2014-05-22 1 views
1

이동 중에도 프로세스를 실행하고 사용자가 요청과 함께 제공 한 쿼리 문자열의 일부 입력을 제공하여 HTTP 요청을 처리하는 작은 애플리케이션이 있습니다. 원격 실행에 대해 해당 입력을 필터링하는 가장 좋은 방법은 무엇인지 궁금합니다. 예를 들어 PHP 대안은 다음과 같습니다. http://php.net/manual/en/function.escapeshellarg.phpGolang으로 안전한 명령 실행 (원격 실행을 피하십시오)

지금은 입력이 유효한 URL이어야 입력을 쉽게 처리 할 수 ​​있지만 일반적으로 일반 필터를 사용하는 것이 좋습니다.

+1

[os/exec] (http://golang.org/pkg/os/exec/)를 사용하는 경우 쉘을 통과하지 않아야하므로 쉘 이탈을하지 않아도됩니다. 입력을 매우 조심스럽게 검증해야합니다! –

+0

그래, os.exec를 사용하면 알 수없는 쉘을 통과하지 못한다는 것을 알지 못했습니다. 그러나 "명령 && 악의적 인"과 같은 무언가가 예를 들어 작동하지 않아도? – Feras

+1

본질적으로 php는 프로세스 실행을 쉘 (sh 호환 가능 쉘에도 보장되지 않음)에서 오프 로딩하고 안전하게 만드는 작업을 수행함으로써 잘못되게 만듭니다. 거의 모든 다른 언어의 os 라이브러리는 커널에 직접 호출하여 암묵적으로 주입 공격을 피합니다. – krait

답변

4

일반적으로 마법과 같은 기능은 굉장히 힘들고 응용 프로그램을 많이 사용하면 응용 프로그램을 공격에 노출 될 수 있습니다.

스마트 URL/요청 구성표를 사용하여 실행해야하는 명령을 얻고 사용자 요청과 쉘 실행 사이에 일정 수준의 해석을 넣어 사용자가 지정한 매개 변수를 직접 사용하지 말 것을 권장합니다.

?verbose=true을 포함하는 요청을 받고이를 명령 행에서 -v으로 변환 할 수 있습니다. 예 : 실행중인 명령에 직접 입력해야하는 문자열과 같은 사용자 입력을 처리 할 때 "따옴표를 사용하여 간단한 이스케이프 처리 (따옴표가 포함되어 있는지 확인하는 간단한 확인)를 수행하여"바비 테이블 "문제.

다른 방법은 프로그램과 기본 명령이 파이프 또는 파일을 통해 데이터를 교환하는 것입니다. 명령 입력으로부터 열린 공격 벡터를 떠날 가능성을 줄인다.

+0

나는 당신이 제안한 첫 번째 부분을 이미하고있다. 문제는 두 번째 인수인데,이 명령은 URL을 인코딩하고 큰 따옴표로 묶는 것이 안전하다고 생각 하는가? 다시 이것은 중요한 임무는 아니지만 오히려 이것과 같은 거대한 구멍이 없습니다. – Feras

+0

충분해야합니다. – mbanzon

+0

(정말 좋은 테스트를 작성합니다.) – elithrar

관련 문제