2014-02-10 1 views
0

문서 루트 외부의 모든 서브 디렉토리와 파일을목록 내가있는 문서 루트 그게 전부 안쪽에 실행되는 인덱스 스크립트가

/var/www/mywebsite/protected-folder/index.php

는 지금은 목록이 들어있는 문서 루트 외부의 디렉토리가 에 파일이 하위 디렉토리 :

다음 업로드 폴더의 문서 루트 내부 때

/var/www/uploads/LIST OF SUBDIRECTORIES/file 

이 코드를 사용

그러나이 폴더는 로그인하지 않고이 스크립트에 대한 액세스 권한이 있어야 공용 폴더에서 비공개해야합니다.

문서 루트 외부에있는 폴더에 대한 링크를 어떻게 만들 수 있습니까? 링크를 클릭하면 해당 디렉토리에있는 파일이 표시됩니까?

편집 :이 사용자가를 통해 횡단 할 수 있도록 아파치 인덱스를 사용하고 있었다 전에 이루어졌다 /var/www/uploads/UNKNOWN LIST OF SUBDIRECTORY LEVEL 1/UNKNOWN SUBDIRECTORIES LEVEL 2/ALL FILES (file can be any file type)

방법 다음 업로드 폴더가 알 수있을 것입니다 하위 디렉토리의 두 계층이있을 것이다 내 질문에 더 명확하게하려면 서브 디렉토리들.

  1. 목록 모든 첫 번째 서브 디렉토리 링크 (링크를 모든 하위 레벨 1)

  2. 다음 링크 일단이이 내가 그것을 작동하는 방법을하므로 직접 URL 액세스를 방지하기 위해 보안 할 필요가 모든 하위 레벨을 목록에서 해당 링크 (하위 2) 쇼에 하위 디렉토리에있는 모든 파일을 클릭하면 1

  3. 마지막으로 하위 레벨에있는 2 폴더를 클릭 2

,

물건을 지우는 희망

답변

0

당신이 가지고있는 코드는 디렉토리가 문서 루트의 안팎에 있다면 상관하지 않습니다. PHP 파일에 링크만으로 파일 자체를 검색 할 수 있습니다 (사용할 수 없으므로 파일 업로드 링크가 아닙니다). 파일을 검색하려면 스크립트를 사용하여 내용을 잡고 출력해야합니다. 이 같은

뭔가 : 당신은 확실히 누군가가 금지 된 파일에 액세스하려고 .. 같은 것들로 파일 경로를 오염되지 확인해야합니다

<?php 
$path = '/var/www/uploads'; 
$file = do_something_to_make_this_safe($_POST['file_to_retrieve']); 

$type = mime_content_type($path . '/' . $file); 
$contents = file_get_contents($path . '/' . $file); 

header('Content-Type: ' . $type); 
header('Content-Disposition: attachment;filename=' . $file); 
print $contents; 

?> 

참고. (따라서 do_something_to_make_this_safe())

+0

어떻게 게시물 정보를 얻을 수 있습니까? 이 스크립트는 자동으로 수행되어야하며 사용자로부터 정보를 얻지 않아야합니다. 단순히 각 디렉토리에있는 파일을 출력해야합니다. – fixnode

+0

GET 또는 POST 일 수 있습니다. 기존 앱에서 링크를 제공합니다. 사용자가 클릭하지 않습니까? 링크는 'file.doc' – Cfreak

+0

과 같지만 링크는 파일이 아닌 디렉토리에 연결됩니다. – fixnode

관련 문제