2011-11-23 4 views
0

각 하위 폴더를 해당 사용자에게만 제한하려는 사용자의 하위 디렉터리가 있습니다.사용자를 하위 디렉터리로 제한

예를 들어 user1 폴더를 보호하여 내부의 파일에만 액세스 할 수 있도록하려면 /users/user1입니다.

.htaccess 및 .htpasswd 파일을 가지고 놀려고했지만, MySQL 데이터베이스에 대해 인증을 받았지만 두 번째로 로그인하라는 메시지가 나타납니다.

사용자가 이전에 인증되었으므로 기본적으로 두 번째 로그 요청을 자동으로 처리하도록하려면 어떻게 해야할지 잘 모르겠습니다.

.ht 파일에 대해 가지고있는 코드를 게시 할 수는 있지만이 정보로 볼을 굴릴 수 있다고 생각했습니다.

+0

인증 방법은 무엇입니까? HTTP 기본 인증을 통해? 폼 기반 쿠키 - 로그인을 사용합니까? 그것들은 꽤 (보통) 서로 독립적 인 두 개의 다른 로그인 시스템입니다. –

+0

나는 약간의 지식을 가지고 있지만, (아파치) htpasswd는 mysql 인증과 같지 않다, mod_auth_mysql을 사용하고 있는가? – ajreal

+0

가능한 속담 : http://stackoverflow.com/questions/2328068/authentication-denying-access-to-files-in-directory-with-php – djdy

답변

1

내가 파일에 액세스 할 PHP는 프록시를 사용하는 것이이 경우에 충분한 될 것이라고 생각의 라인을 따라 뭔가 : htaccess로

<?php 
    /** Load your user assumed $user **/ 

    $file = trim($_GET['file']); 

    /** Sanitize file name here **/ 

    if (true === file_exists('/users/user'.$user->id.'/'.$file)) { 
     //from http://php.net/manual/en/function.readfile.php 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename="'.$file.'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } else { 
     throw new Exception('File Not Found'); 
    } 

Download.php는 거부하려면 모든 직접 파일 다운로드

deny from all 

그러면 해당 폴더로 링크됩니다. /download.php?file=filename.ext를 사용하면 현재 사용자의 users 디렉토리에서만 해당 파일을 다운로드 할 수 있습니다.

디렉토리 횡단 공격에 취약하지 않도록 입력 파일 이름을 보호해야합니다.

+0

감사합니다. 이 작업은 html5 오디오 태그에 파일을로드하여 재생할 수 있도록하려는 경우에만 수행할까요? – innov83r

+0

예, 오디오 태그로 사용하는 경우 다음 줄을 따라 무언가를하면됩니다.

+0

헤이 제이슨, 그것은 나를 위해 일하고있는 것처럼 보이지 않는다. .. 계속 그것에 일하게하려고 노력하는 것. ... – innov83r

관련 문제