2013-04-20 1 views
0

사용자가 서버에서 개인 파일을 업로드하고 다운로드 할 수있는 작은 웹 사이트를 구축합니다. Codeigniter는 프로젝트에 사용되고 있으며 file uploading class을 사용하여 파일을 업로드합니다.관련 업 로더 만 해당 파일을 다운로드 할 수 있습니다.

발생하는 문제는 파일을 업로드 한 사람 만 다운로드 할 수 있도록하는 방법입니다. 현재 모든 파일은 localhost/curious/uploads에 업로드됩니다. 파일은 업로드하는 사람 만 볼 수 있지만 업로드 링크를 공유하면 누구나 파일을 다운로드 할 수 있습니다.

스티브가 secure_rom.doc 파일을 업로드하고 경로가 localhost/curious/uploads/secure_rom.doc 인 경우 해당 링크가있는 모든 사용자가 파일을 다운로드 할 수 있습니다.

업 로더 만 다운로드 영역에서 다운로드 할 수 있고 다른 사람이 아닌 것은 어떻게 할 수 있습니까?

+1

, 아마도 가장 쉬운 방법은 내부의 하위 폴더를 가지고하는 것입니다/업로드는, 이름 사용자의 사용자 이름으로/uploads/LiveEn은 LiveEn에서만 액세스 할 수 있고 /uploads/emma.fn2는 emm을 통해서만 액세스 할 수 있습니다 a.fn2. –

+0

@ emma.fn2 시도했지만 그 제한이 제대로 작동하지 않습니다. 따라서 사용자가 로그인 할 때 해당 폴더에 대한 액세스 권한 만 있지만 다른 사람이 링크를 공유하면 ID를 직접 다운로드 할 수 있습니다. – LiveEn

+0

접속하려는 사람이 귀하의 사이트에 로그인했는지 그리고 다운로드 권한이 있는지 확인하기 위해 점검을하고 있었습니까? 그렇지 않다면 /uploads/username/file.xyz와 일치하는 rewriterule을 설정하고이를 $ _SESSION [ 'username']을 검사하는 다운로드 컨트롤러 파일로 전달하고이를 비교하여 폴더 이름 (URL에서 온 것입니다). 파일을 보이는 웹 디렉토리 외부에 두어 URL에서 바로 다운로드 할 수 없도록하십시오. 아마도 그것이 작동하지 않는 이유 일 것입니다. 그게 말이 되면!? 미안 미안하다. –

답변

0

당신은 파일 이름을 가진 헤더와 콘텐츠 유형을 설정) 사용자가

2

기록되어 있는지 확인)

1 (CodeIgniter의에 적응하려고) 다운로드 스크립트를 사용할 수 있습니다

3) 파일을 읽고 클라이언트에게 보냅니다.

컨트롤러 : 귀하의 상황에 대해 너무 많이 알고하지 않고

if($userConnected) { 
header('Content-disposition: attachment; filename=' . $file_name); 
header('Content-type: ' . $file_mime); 
$file_content = file_get_contents($file_location); 
echo $file_content; 
} 
else 
echo 'No permission !'; 

Mime content function

+0

작은 설명. 사용자가 다운로드하라는 메시지를 표시하면 직접 링크가 표시됩니까? – LiveEn

+0

서버에서 파일을 읽으면 직접 링크가 표시되지 않습니다. 사용자는 파일의 이름 만 볼 수 있습니다. (예 : www.ex.kr과 같이 파일을 가져 오기 위해 GET 매개 변수 나 다른 것을 사용해야합니다.com/script.php? file = secure_rom.doc 그리고 서버에서 file_get_contents ('/ curious/uploads/'.$_ GET ['file '])) – Pierrickouw

+0

위 .. 이렇게해볼 것입니다 .. – LiveEn

0

쉬운 방법

-just store the 'id' of the user when he/she uploaded something. 
- hide the URL if 'user_id' is different. 
- adding random character will have in securing.