2013-10-30 3 views
3

내 PHP 스크립트는 $ _POST [ 'fileUrl'];을 (를) 사용합니다. 어떤 사용자가 내 서버의 다른 파일에 액세스하기 위해 "../../"등을 fileUrl에 추가 할 수 있기 때문에 보안 위협이 있다고 생각하는 사용자의 파일을 검색합니다..htaccess 파일에서 open_basedir을 설정하면 PHP 스크립트 디렉토리 액세스가 완전히 제한됩니까?

내 스크립트가 특정 디렉토리에 액세스 할 수있는 파일을 제한하는 최선의 (가장 안전한) 방법을 찾아야합니다. 내가 읽은 것부터 open_basedir 플래그를 설정하면 스크립트 액세스가 지정된 경로로 제한됩니다. 이 script.php

$fileUrl = $_POST['fileUrl']; 
$content = chunk_split(base64_encode(file_get_contents($fileUrl))); 

htaccess로

php_flag open_basedir "var/www/vhosts/mydomain.com/php_can_only_access_files_in_this_directory/" 

이 할 수있는 더 좋은 방법이 있나요? 이 스크립트는 open_basedir 외부의 폴더에 액세스하는 것을 완전히 차단합니까?

+0

'/ var/www/vhosts'는'/ var/www/vhosts'로 시작해서는 안되며 절대 파일 경로로 해석해야합니까? –

답변

1

파일 이름에 ../../를 사용하여 디렉토리 트래버스 공격을 수행하지 않으려면 사용자 입력에서 basename을 호출하여 파일 이름 만 제거하는 것이 좋습니다.

자세한 내용은 http://au2.php.net/basename을 참조하십시오.

open_basedir 플래그는 그 기능을 검사하는 기능에만 영향을 미칩니다. 과거에는 imagemagick과 같은 확장 기능에서 PHP 함수가 open_basedir 플래그를 무시하는 경우가있었습니다. 따라서 안전한 코딩 방법과 파일 권한을 사용하여 파일에 대한 액세스를 제한해야합니다.

1

s/php_flag/php_value/.

php_flag는 open_basedir에 대해 일관되게 작동하지 않습니다. php_flag는 플래그 용이며 php_value는 값 용입니다. "path/: another/path /"는 값입니다.