2011-03-23 3 views
6

저는 PHP로 어떻게 디지털 다운로드를 보호 할 수 있는지 알아 내려고하고 있습니다. 내 연구를 시작할 수 있도록 몇 가지 일반적인 지침이 필요합니다. 나는 유용한 것을 찾을 수 없을 것 같습니다.PHP - 디지털 다운로드 보호

내 사용자가 다운로드 할 수있는 파일을 만들 수 있지만 다운로드 폴더에 직접 액세스 할 수 없도록하려고합니다. 또한 다운로드 링크를 일정 기간 또는 한 번만 다운로드 할 수 있도록하고 싶습니다.

올바른 방향으로 나를 가리킬 수 있습니까?

+0

데이터베이스는 친구입니다. – BoltClock

+0

''* analog * downloads?'@usniorg와는 반대로 사용하는 웹 서버 소프트웨어를 알려주시겠습니까? 그것은 그 해답에 영향을 미칠 것이다. – Charles

+0

외부 웹 루트에 파일을 저장하고 –

답변

10

가장 좋은 방법은 아파치의 모드로 확인 후 다운로드 Managment를 위임하는 것입니다

x_sendfile 

https://tn123.org/mod_xsendfile/

사용법 : 기본적으로

<?php 
... 
if ($user->isLoggedIn()) 
{ 
    header("X-Sendfile: $path_to_somefile"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Disposition: attachment; filename=\"$somefile\""); 
    exit; 
} 
?> 
<h1>Permission denied</h1> 
<p>Login first!</p> 

머리글을 보내 X- Sendfile은 파일을 가로 채고 다운로드를 관리합니다 (파일은 가상 호스트 외부에있을 때마다 찾을 수 있습니다).

그렇지 않으면 당신은 로그인 확인 후 readfile와 내용을 파일의 ID를 가져옵니다 및 인쇄하는 간단한 파일 download.php을 구현할 수

+0

'X-Sendfile' 지원은 nginx와 lighttpd (원래의 위치)에서도 가능하며, 사용 가능한 경우에는 * 가장 좋은 옵션 *입니다. – Charles

1

그냥 몇 가지 예 : 사용자가 웹 서버의 문서 이외의 파일을 배치 할 수 있습니다 루트 또는 "모두 거부"규칙을 사용하여 .htaccess 파일로 보호되는 디렉토리 올바른 헤더 (mime-type, filesize 등)를 설정하고 파일을 반환하는 사용자 정의 PHP 함수로 파일을 전달합니다.

당신은 MD5 또는 SHA1을 기반으로 고유 ID 년대와 링크를 만들 수는 해시 - mod_rewrite를 규칙 지점이 PHP 파일에 ID가, 데이터베이스의 ID를 조회 및 시간 검사를 수행

example.com/downloads/73637/a8d157edafc60776d80b6141c877bc6b 

처럼

example.com/dl.php?id=a8d157edafc60776d80b6141c877bc6b&file=73637 

에 다시 작성하는 것은 여기에 당신이 원하는 일을의 예의 nginx 및 PHP : http://wiki.nginx.org/HttpSecureLinkModule

0

"Secure Download Links ", PHP 스크립트는 다운로드 URL을 숨기거나 다운로드 파일의 이름을 바꾸는 데 사용할 수 있습니다. 웹 루트 아래에 저장하는 옵션과 절대 http URL이있는 웹 루트 위에 저장된 파일에 대해서도 옵션이 있습니다.