2012-05-18 3 views
0

그래서 파이썬 API를 공개하는 타사 응용 프로그램이 있습니다. 그 제 3 자 응용 프로그램과 함께 할 파이썬 스크립트가 있습니다.다른 실행 파일에서 파이썬 프로세스를 시작해야합니까?

python 스크립트는 명령 줄 인수 만 사용하며 사용자 입력은없고 stdout에 씁니다.

런타임시 ASP.NET 웹 사이트에서 실행되도록 연결하고 있습니다. 파이썬은 매우 강력하기 때문에 보안 관점에서 하드 코드 된 또는 로컬로 읽은 (App.Config) 스크립트 경로로 파이썬 프로세스를 시작하고 명령 줄 인수를 다음과 같이 복사하는 새로운 실행 파일을 만드는 것이 합리적인지 궁금합니다. 파이썬 프로세스.

이 새로운 실행 파일은 공격자가 임의의 파이썬 코드를 업로드하고 시작하는 것을 방지하기위한 방법으로 .NET 응용 프로그램에서 시작됩니다. 이것이 어떤 공격 벡터를 무효로 만들지, 아니면 단지 더 복잡한가?

또한 제 3 자 확장은 CPython 용으로 작성되었으므로 IronPython을 사용할 수 없습니다. 코드의

아이디어 :

Process p = new Process(); 
p.StartInfo.FileName = "python.exe"; 
p.StartInfo.Arguments = "goodscript.py \"" + argument1.Replace("\"","\\\"") + "\" \"" + 
    argument2.Replace("\"","\\\"") + "\""; 
p.Start(); 

내가 -i와 같은 명령 줄 스위치 중 하나가 주입 될 수 있다는 걱정 또는 goodscript.py하기 위해 어떻게 든 파일 경로가 다른 스크립트를 가리 키도록 변경 될 수 있습니다 . 나중에 가능하다면 python.exe의 파일 경로를 다른 실행 파일 경로로 변경할 수 있습니다.

+0

확실히 말하기 위해 실제 코드를 볼 필요가 있지만 복잡성이있는 것 같습니다. –

+0

@thepaul 설명을위한 코드를 추가했습니다 –

+0

hi \ "; cmd 또는 hi \"|와 같이 사용자 데이터에서 여러 번 시도한 후 | cmd를, 모든 인자는 파이썬으로 보냈습니다.명령 줄에서 평가되는 것이 아니라 exe입니다. –

답변

2

예제 코드에는 확실히 보안 문제가 있습니다. Process.StartInfo가 어떻게 작동하는지 잘 모르겠습니다. 하위 프로세스를 실행하기 전에 인수를 분할하거나 일부 셸을 사용하여 셸을 사용하는 경우에는 공격자가 인수 문자열에 백 슬래시를 넣을 수있는 최소한의 여지가 있으며 두꺼운 따옴표를 이스케이프 처리합니다.

인수를 개별적으로 전달하는 다른 방법이있는 경우 문자열로 팩하지 않고 다른 구문으로 구문 분석하도록하는 것이 훨씬 바람직합니다.

+0

안녕하세요 \ "; cmd 또는 hi \"와 같은 변형을 시도했습니다. cmd 또는 hi \\ "& cmd하지만 모든 것이 파이썬으로 이동하는 것보다는 순수한 쉘 명령처럼 행동하는 것, 인수 문자열을 끊는 방법에 대한 아이디어는 무엇입니까? –

+0

그래, 쉘에 의해 해석되지 않으면, 그런 식으로 다른 명령을 내릴 위험이 없을 것입니다. 다른 한편으로, 어떤 규칙이 작동 중인지 모르는 상태에서 위험이 무엇인지 확실히 말하기는 어렵습니다. 여전히 공격자가 인수가 분리되는 방식을 변경하고 추가 인수 등을 도입 할 가능성이 있습니다. 귀하의 경우에는 문제가되지 않을 수도 있지만 다시는 그렇지 않을 수도 있습니다. 진짜 미묘한. –

0

현재 스크립트는 단지 복잡성을 추가하는 것이 아니라 실제로 보안 허점을 열어 놓았습니다. 즉, 토큰 화 된 문자열 목록 대신 파싱해야하는 단일 문자열을 인수에 전달하는 것입니다.

+0

.NET에서 문자열 인수로 인수를 전달하는 방법을 자세히 설명해 주시겠습니까? –

+0

.NET에서이를 수행하는 방법은 모르겠지만 POSIX는 함수를 정의하는 exec 패밀리를 정의했으며, 이는 Windows에서 프로세스 .h –

1

귀하의 파이썬 스크립트가 웹 사이트에 의해 호출됩니다. 다른 사람이 웹 사이트를 사용하여 파이썬 스크립트를 다른 인수로 호출하게하거나 다른 스크립트를 실행하거나 인 보안 구멍이 인 경우. "파이썬이 매우 강력합니다"와 아무런 관련이 없습니다. 어떤 언어로든 언어

파이썬 스크립트를 다른 것으로 포장하고 호출하는 방법에 정확히 어떻게 영향을 미칠 것이라고 생각하십니까? 그 대신에? 어떤 사람이 다른 실행 파일을 호출하거나 다른 인수 나 다른 데이터로 호출하도록 할 수 있습니다.이 경우 어떤 언어를 사용하든 상관없이 망설입니다. 또는 그들이 할 수없는 경우, 당신이 어떤 언어를 사용하든 상관없이 당신은 괜찮습니다.

관련 문제