2012-02-11 1 views
6

사용자가 PHP를 사용하여 앱을 만들 수있는 플랫폼을 개발 중입니다. 사용자가이 작업을 수행 할 수있는 안전한 방법이 있습니까? 기존 소스 코드 나 서버를 손상시킬 수있는 기능의 사용을 제한 할 수 있습니까? 나는 단지 그들에게 기본적인 기능을 사용할 수 있고 그들에게 1 개의 데이터베이스에 대한 액세스 권한을 부여하기를 원합니다. 많은 사용자가 공유 서버가 존재하므로 이것이 가능해야합니다. ...사용자가 자신의 PHP를 내 서버에 추가 할 수있는 안전한 방법이 있습니까?

어떤 조언이 필요합니까?

답변

3

php.ini에서 비활성화 된 모든 기능을 나열 할 수 있습니다. 모든 유령에 대해 다르게 설정할 수 있습니다.

disable_functions = "exec,passthru" 

공유 호스팅은 위와 동일합니다. 불능으로 간주 될 수있다

다른 기능 : 에서 ReadFile,는 popen,는 fsockopen,하면 fopen, file_get_contents을 포함, 당신은 stream_context_create, chmod를 chown 함수

전체 목록을 찾을 수 here

하지만를 사용하는 경우 이러한 함수는 코드 내부에서도 모든 코드 파일을 읽기 전용으로 아파치 사용자 또는 모든 경우에 작성하는 것이 더 낫습니다.이 경우 chown 및 chmod는 큰 역할을하지 못합니다.

+1

가상 호스트 설정에서도이 작업을 수행 할 수 있습니다. – remy

+0

@remy 잘 잡습니다.편집 됨 –

+0

평가판을 사용 중지하는 데있어 중요한 점은 무엇입니까? –

1

PHP safe mode을 사용하여 공유 서버를 실행하는 데 사용되었지만 지금은 더 이상 사용되지 않습니다.

더 나은 해결책은 각 사용자의 PHP 프로세스를 다른 사용자 계정으로 chroot jail에서 실행하고 OS가 보안을 걱정하게하는 것입니다. 사용자는 임의의 코드를 업로드하고 실행할 수 있지만 샌드 박스가 제대로되어있는 한 많은 위험을 감수 할 수 없습니다.

디스크 할당량을 사용할 수도 있습니다. 사용자 별 메모리 사용에 ulimits를 사용하고 네트워크 연결 (수신 및 송신)을 허용하지 않는 것을 고려하십시오.

데이터베이스의 경우 데이터베이스를 하나의 데이터베이스로 설정하고 자신의 데이터베이스에만 액세스 할 수 있도록 설정하고 더 많은 권한을 부여하지 마십시오.

3

이 작업을 한 번도 해보지는 않았지만이 방법이 정상적이고 안전한 환경에서 도움이 될 수 있다고 생각합니다.

우분투 (debian 기반)를 사용하는 경우 jailed chroot을 만드는 것이 좋습니다. 링크

에서 chroot로 디렉토리 외부 액세스하는 파일에서 해당 디렉토리 내부에서 실행하는 경우 이 응용 프로그램을 방지 컴퓨터의 특정 디렉토리는 기본적이다. 많은 경우 chchoot는 시스템에 다른 운영 체제를 설치하는 것과 같습니다.

또한 chroot 디렉토리에서 실행되는 응용 프로그램에서 사용해야하는 전용 PHP 인스턴스를 설치해야합니다.

당신은 "max_execution_time이라는"로 php.ini 파일을 구성 할 수 있습니다 "disable_functions", ... 등

이 정확하게 당신이 실제로 필요한 것입니다.

관련 문제