2012-04-04 3 views
1

PHP를 사용하면 스크립트 유효성을 검사 한 후 계약서를 생성하는 스크립트를 개발하고 있습니다.PHP가 포함 된 PDF 페이지에 대한 액세스 제한

계약서는 TCPDF로 생성 된 pdf 문서이며 사용자 ID가있는 서브 디렉토리에 서버에 저장됩니다. 예를 들어 'contracts/132/1.pdf'는 ID가 132 인 사용자의 청구서 번호 1이됩니다.

그러나 개인 정보가 포함되어 있기 때문에 사용자 132 만 해당 파일에 액세스 할 수있게하려고합니다. 각 하위 폴더의 pdf 문서에 대한 액세스를 각각의 사용자에게 제한하려면 어떻게해야합니까? (pht 또는 htaccess 중 가장 적합한 방법 - htaccess에 익숙하지 않습니다.)

답변

2

가장 쉬운 방법은 바로 (발전기 스크립트가 수행 등), 그 기능 readfile("/path/to/contract.pdf");

그 방법이다 유효한 세션의 존재를 필요로하는 PHP 스크립트를 가지고 아마, 당신은 당신의 PDF 래퍼 스크립트를 가질 수 있습니다 다운로드되는 계약이 디렉토리에있는 계약이 아니라 sesion에있는 사람의 올바른 계약인지 확인하십시오.

디렉토리에 대한 .htaccess 기반 솔루션의 문제점은 디렉토리에 대한 읽기 권한이있는 사람은 누구나 어떤 계약서를 다운로드 할 수 있다는 것입니다.

http://example.com/contract.php?user=132&bill=1 당신이 할 수처럼 URL을 감안할 때 : 중간에

<?php 

$user = $_GET['user']; 
$bill = $_GET['bill']; 
# do input validation on $user and $bill. No really, do it. 

if ($user != $_SESSION['user']) { 
    die("Security error; the black choppers are on their way."); 
} 

header("Content-type: application/pdf"); 
header('Content-Disposition: attachment; filename="Contract-$user-$bill.pdf"'); 

readfile("/path/to/pdfspool/$user/Contract-$user-$bill.pdf"); 

if() 덩어리가 요청 된 $ 사용자가 현재 사용자의 유효 함을 확인합니다. 분명히이 사용자가 처음 로그인 할 때 $ _SESSION [ 'user']을 저장하려고합니다.

물론 스풀 파일을 보관할 필요는 없습니다. PDF 생성 프로세스가 웹 서버를 압도하지 않을 경우 (그리고 다른 문제가있는 경우), 요청에 따라 각 PDF를 처음부터 다시 생성하는 것이 더 쉽습니다. 이것이 회사 청구서로 지금하는 일이며, 각 인보이스에는 생성 된시기와 어떤 IP 주소에서 요청했는지를 나타내는 6 포인트 푸터가 있습니다. :)

+0

사용자가 주소 표시 줄의 PDF 스크립트에 대한 직접 URL을 입력하는 것이 현명하다면 어떻게해야합니까? 예를 들어, www.mysite.com/contracts/124/5.pdf를 입력하십시오. –

+0

업데이트 됨. 세션 변수에 대해 $ 사용자의 유효성을 검사하는 코드 섹션을 추가했습니다. – ghoti

2

우선, PDF 파일을 사이트의 웹 루트 외부에 배치하고 스크립트를 통해 검색하십시오.

PDF를 검색 할 위치로 요청을 전달하는 Mod_Rewrite 규칙과 URL에서 사용자 ID 및 문서 ID를 가져와 액세스 제어를 수행하는 PHP 스크립트를 결합하면 원활하게 처리 할 수 ​​있습니다. 파일의 내용.

PHP 코드를 사용하여 HTTP 레벨 인증을 수행하는 방법에 대한 자세한 내용은 the PHP Manual을 참조하십시오.

+0

"사이트의 웹 루트 외부에서 PDF 파일을 배치"한다는 것은 무엇을 의미합니까? 예를 들어 설명해 주시겠습니까? –

+0

웹 루트가'/ home/user/public_html'에 있다면 파일을'/ home/user/pdfs'에 넣으십시오. PHP가'/ home/user/pdfs' 디렉토리의 내용을 읽을 수 있다면 PHP는 파일 내용을 검색 할 수는 있지만 웹에서 직접 액세스 할 수는 없습니다. – Ariel

+0

고마워, 나는 그런 현명한 생각을 생각하지 못했다. –

관련 문제