2009-08-18 2 views
10

exec를 Windows 서버에서 작동시키고 "fork 할 수 없습니다"라는 오류 메시지가 표시되도록하려고합니다. 이 문제를 조금 훑어보고 나면 IUSR 계정에 c : \ Windows \ System32 \ cmd.exe에 대한 읽기 및 실행 권한을 부여하는 것이 좋습니다.PHP는 안전한가요?

하지만 주요 보안 구멍이 맞습니까? 안전 해요? [PHP에서] 서버에있는 exe를 실행할 다른 방법이 있습니까? 당신이 당신의 사용자가 매개 변수를 입력 할 경우

cmd /c foo -bar -baz 

그것은 단지 보안 구멍이다 :

exec("foo -bar -baz"); 

그것은이 호출 윈도우 PHP이 볼 때 때문에

답변

14

그것은 cmd.exe를 실행해야합니다. 즉, 당신은이 작업을 수행해서는 안 :

// DO NOT DO THIS! 
exec("foo -bar=" . $_GET['bar']); 

대신 escapeshellarg하여 매개 변수를 소독해야한다.

+4

exec 기능은 사용자가 수행하는 것만 큼 안전합니다. 오랫동안 여기에 표시된 것과 같은 적절한 탈출 함수를 사용하면 좋을 것입니다. –

+1

스크립트 명령을 안전하게 할 수는 있지만 일반적인 공격 경로는 악성 스크립트를 업로드하고 'exec'및 유사한 기능을 사용하여 서버를 해킹하는 것입니다. 따라서 많은 공유 호스팅 환경에서는이 기능과 쉘 인수를 실행할 수있는 다른 기능을 비활성화합니다. – Machavity

1

Windows에서 프로세스를 만드는 것은 Unix 클래스 운영 체제보다 프로세스 오버 헤드가 많습니다. 많은 수의 사용자가있는 경우 exec() 번을 반복해서 호출하면 서버가 다운 될 수 있습니다. 서버에 과부하가 걸릴 것으로 예상되는 경우 작업자 프로세스를 계속 실행하는 것이 좋습니다. Windows service

+0

Windows 및 Linux에서도 동일한 문제가 발생할 수 있습니다. – Brad