2012-10-16 2 views
2

호스트가 proc_open 및 shell_Exec을 비활성화하고 공격자가 사용하는 경우 문제를 일으킬 수있는 모든 기능을 서버 공격으로 인해 PDF 파일을 생성하기 위해 wkhtmltopdf를 호출하는 공유 호스팅 환경에서 PHP 클래스를 사용하고있었습니다. 호스트가 이러한 기능을 사용 중지하기 전에 모두 제대로 작동했습니다. 내가 사용하는 PHP 클래스에서 proc_open 함수를 비활성화하여 더 이상 작동하지 않는 메소드가 있습니다. 정확한 결과를 반환하는 아래 메소드 대신 사용할 수있는 altenative가 있습니까? 어떤 도움을 주셔서 감사합니다. 백틱 연산자의PhP에서 proc_open의 대체 기능은 무엇입니까?

echo `wkhtmltopdf.exe test.html test.pdf`; 

사용이 shell_exec()와 동일합니다 :

private static function _pipeExec($cmd,$input=''){ 
         $proc=proc_open($cmd,array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes); 
         fwrite($pipes[0],$input); 
         fclose($pipes[0]); 
         $stdout=stream_get_contents($pipes[1]); 
         fclose($pipes[1]); 
         $stderr=stream_get_contents($pipes[2]); 
         fclose($pipes[2]); 
         $rtn=proc_close($proc); 
         return array(
             'stdout'=>$stdout, 
             'stderr'=>$stderr, 
             'return'=>$rtn 
           ); 
       } 
+0

이 특정 기능의 작동 방식은 proc_open 없이는 불가능합니다. 동일한 최종 결과를 얻기 위해 대체 기술이있을 수도 있지만이 기능 외에도 대체해야 할 가능성이 큽니다. 그러나 우리는 코드가 많은 도움을주기 위해 사용되는 코드에 대해 더 많이 알아야합니다. – SDC

+0

@SDC -이 코드는 다음 클래스를 사용하여 HTML에서 PDF 파일을 생성하는 데 사용됩니다. http://code.google.com/p/wkhtmltopdf/wiki/IntegrationWithPhp – Roland

+0

유일한 조치는 외부 웹 서비스에 이러한 조치를 수행 할 수있는 권한을 부여하는 것입니다. 정의에 따르면 환경이 잠겨 있으므로 외부에서 아무 것도 호출 할 수 없습니다. –

답변

3

disable_functions 설정은 php.ini에서만 변경할 수 있습니다. 즉, 서버 전체가 공유 호스트의 모든 사이트에 적용됩니다. 여기

는 옵션입니다

  1. 당신은 전용 시스템 (또는 VPS)에 당신의 위치를 ​​이동하는 현재의 호스팅 제공을 요청할 수 있습니다.

  2. 다른 곳으로 가십시오. 이러한 제약이없는 제공 업체를 찾으십시오. 이것은 약간의 시간이 걸리지 만 그만한 가치가있을 것입니다.

  3. DIY. 서버 설정은 수행중인 작업을 알지 못하는 경우에는 권장되지 않지만 그렇게 할 경우 모든 플랫폼 호스팅 공급자가 수행합니다. 요즘 아마존에서 월 5 달러 정도의 작은 전용 사이트를 운영 할 수 있습니다.

마지막 옵션은 PDF 생성을 "아웃소싱"하는 옵션을 제공하므로 나머지 사이트는 여전히 현재 호스트에서 실행됩니다.

+0

조언 해 주셔서 감사합니다. 마지막 옵션에 대해 생각 중이며, PDF 파일을 생성 한 웹 서비스를 만든 다음 이전 호스트에 사이트를 유지하는 것이 좋습니다. 이렇게하면 복잡한 구성이므로 사이트 이동과 같은 문제가 없습니다. – Roland

+0

호스팅 계정을 신청할 수있는 Amazon 사이트에 대한 링크가 있습니까 – Roland

+0

@Roland 자세한 정보는 aws.amazon.com에서 찾을 수 있습니다. –

-4

는 (``) 역 따옴표를 다시 사용하십시오.

+1

shell_exec도 사용할 수 없습니다. – Roland

관련 문제