2012-07-13 3 views
1

폴더 경로가 있습니다 (예 : /var/www/tester/assets/themes/default/css/).php로 디렉토리 이동?

사용자는 예를 들어 폴더에 대한 상대 경로를 제공 할 수 있습니다. layout/ie7.css/var/www/tester/assets/themes/default/css/layout/ie7.css의 경로를 제공합니다.

잘 작동하지만 사용자가 디렉토리 트리를 탐색 할 수 있기를 바랍니다.

그래서 사용자가 ../../cache/css/ie7.css을 제공하면 다시 CSS 폴더의 경로로 끝나야합니다. /var/www/tester/assets/themes/default/cache/css/ie7.css으로 끝납니다.

는 난 그냥 realpath() 예컨대에 함께 전달할 수 있다고 생각 :

$base = '/var/www/tester/assets/themes/default/css/'; 
$user_path = '../../cache/css/ie7.css'; 
$final_path = realpath($base.$user_path); 

을하지만 그건 그냥 false를 반환합니다. 어떻게해야합니까?

+0

PHP는 shis 폴더를 열 수 있습니까? 깨끗한 경로 '/var/www/tester/assets/themes/cache/css/ie7.css'로 시도하고 얻은 결과를 확인하십시오 – Kristian

+1

"실행중인 스크립트에는 계층 구조의 모든 디렉토리에 대한 실행 권한이 있어야합니다. 그렇지 않으면 realpath () FALSE를 반환합니다. " - 문서에서 ... – Raz

답변

1

먼저 실제 경로 기능은 주어진 경로가 있는지 여부도 확인합니다. 경로가 존재하는지 확인하십시오. ???

/var/www/tester/assets/themes/default/css/../../cache/css/ie7.css 

당신이 제안하지만 지정된 파일을이 폴더가 존재 하는가

/var/www/tester/assets/themes/cache/css/ie7.css 

에서 끝으로

/var/www/tester/assets/themes/default/cache/css/ie7.css 

에서 생을 마감하지 않을까요?

+0

정확합니다. 나는 길을 잘못 잡았다. 가능한 빨리 받아 들일 것입니다. – Hailwood

0

그냥하지 마세요. /var/www/tester/assets/themes/default/css/../../cache/css/ie7.css과 같은 경로에는 아무런 문제가 없습니다. 모든 OS 및 브라우저에서 작동합니다.

참고 : 여기에 보안 위험이있는 것으로 알고 있습니까? 사용자가 ../../../../../../../etc/passwd을 제공하면 어떻게됩니까?

+0

잘못된 컨텍스트에서 "users"를 사용합니다. 그들은 내가 만드는 PHP 라이브러리 사용자입니다. 설정 파일에 의해 제공되는 경로. 보안 상 위험하지 않습니다. "사용자"는 자신의 스크립트를 작성하여이를 수행 할 수 있습니다. 그래도 좋은 팁. – Hailwood

+0

또한 여러 번 사용하면 해당 경로를 변환해야하는 데 따른 약간의 (아마도 무시할 만하지만 여전히 일부) 오버 헤드가 없습니까? – Hailwood

관련 문제