2011-02-22 2 views
2

일반 URL을 통해 액세스 할 수 있고 공개적으로 다운로드 할 수있는 Apache 서버의 디렉토리에 여러 파일이 있습니다. 아파치 htaccess 파일을 통해이 폴더를 보호 할 수 있지만 사용자가 링크를 클릭 할 때 사용자 이름과 암호를 보내는 프로세스를 자동화하려고합니다.HTTP를 통해 파일에 액세스 할 때 사용자 이름과 암호를 지정할 수 있습니까?

사용자 이름과 암호를 전송하는 데 사용할 수있는 기본 HTTP 인증 방법이 있다는 것을 알고 있습니다. 그러나 이러한 보안은 매우 안전하지 않다고 들었으므로 권장 할 수있는 다른 방법이 있는지 궁금해 한 적이 있습니까?

클릭 한 링크를 통해 전송되는 사용자 이름이나 비밀번호는 HTTPS를 통해 전달됩니다.

+1

공개적으로 사용할 수있는 경우 암호로 보호하고 싶은 이유가 무엇인지 스스로 자문해야합니다. 확실한 이유가 무엇입니까? 설명해 주시겠습니까? – Capsule

+0

[다이제스트 인증] (http://en.wikipedia.org/wiki/Digest_access_authentication) 괜찮습니다. 모든 것이 HTTPS를 통해 이루어지면 기본 인증조차도 보안 상 좋습니다. – DanMan

답변

1

서버 측 언어를 사용하여 정보/제어 액세스를 그런 식으로 저장할 수 있습니다. 그 방향으로 .htaccess를 사용할 필요가 없습니다.

백엔드의 모든 내용을 확인하기 때문에 보안상의 이유로 가장 좋은 방법이라고 생각합니다.

업데이트 코드 :

<?php 

# Wrap this in your credentials -- # 

$directory_path = $_SERVER['DOCUMENT_ROOT'] . "/directory/path/here/"; 
$file_path = $directory_path . $_GET['downloadfile']; 

if ($file_exists = fopen ($file_path, "r")) 
{ 
    $file_size = filesize($file_path); 
    $file_parts = pathinfo($file_path); 
    $file_extenion = strtolower($file_parts["extension"]); 

    header("Content-type: application/octet-stream"); 
    header("Content-Disposition: filename=\"".$file_parts["basename"]."\""); 
    header("Content-length: $file_size"); 
    header("Cache-control: private"); //use this to open files directly 

    while(!feof($file_exists)) 
    { 
     $buffer = fread($file_exists, 2048); 
     echo $buffer; 
    } 
} 
fclose ($file_exists); 
exit; 

# -- End credential wrap -- # 
?> 

이 그런 다음 당신은 적절한 헤더 파일에 대한/MIME 유형을 넣어해야합니다 download.php?downloadfile=something.jpg

로 파일을 호출하고 자격 증명에 그 포장 수 validatation,하지만 그건 나중에 작동합니다.

궁금한 점이 있으면 알려주세요.

+0

서버 쪽에서 PHP를 사용하고 있습니다. 문제는 누군가 파일의 URL을 알고 있다면 간단히 브라우저에 입력하고 파일을 다운로드 할 수 있다는 것입니다. www.mysite.com/filestosecure/myfile.pdf 이렇게하면 모든 PHP를 우회 할 수 있으므로 기본 인증이 나에게 유일한 방법 인 것처럼 보이지만 모든 대안을 고맙게 생각합니다. –

+0

다운로드 스크립트를 사용하여 파일을 저장하거나 /yourdirectory/download.php?filepath=something.jpg와 같은 파일을 저장 한 다음 해당 방법으로 파일을 빌드 할 수 있습니다 (자격 증명이 일치하는 경우). 더 좋은 예제를 제공 할 수 있습니다. – TNC

+0

예 샘플 스크립트를 작성할 수 있다면 매우 좋습니다. –

관련 문제