2009-04-10 3 views
6

나는 눈부신 보안 구멍이있는 응용 프로그램을 상속 받았습니다.허가 된 PHP 사용자에게 파일 액세스 제한

세션 기반 보안이 있지만 파일 업로드 (사용자 별)는 어떤 방식 으로든 보호되지 않으며 공용 파일 트리에 저장됩니다.

파일 이름은 규칙을 따르지 않아 추측하기 어렵지만 데이터는 민감하므로 권한이없는 파일 액세스를 막기 위해 보안 조치를 구현해야합니다.

파일의 위치를 ​​이동하는 것은 실제로 옵션이 아니므로 요청을 PHP 처리기 스크립트로 전달하는 htaccess 솔루션을 찾고 있습니다.

누구나 이런 유형의 또는 다른 좋은 해결책을 구현 한 경험이 있습니까? 이 영역에서 어려움을 겪고 있기 때문에 .htaccess 구문의 특정 예제가 크게 감사하겠습니다.

답변

6

핸들러에 대한 요청을 푸시하는 것이 더 이상 중요하지 않으므로 실제로 이동하는 것이 옵션이 아닌 이유를 실제로 이해하지 못합니다. 하지만 너는 현장에있는 남자 야.

RewriteEngine on 
RewriteRule path/to/where/these/files/live/(.*) /handlerscript.php/$1 

이 그럼 당신은 $_SERVER['PATH_INFO']에서 나머지 파일의 경로와 이름을 데리러 : 같은

htaccess로 보인다.

+0

mod_rewrite를 잊어 버렸습니다. 이것은 더 나은 해결책입니다. – Matt

+0

감사합니다.이 솔루션을 살펴 보겠습니다. 파일의 위치를 ​​옮기고 싶지 않은 이유는 사용자가 파일에 대한 링크가 포함 된 이메일을 수신한다는 것입니다 (다시 추가하지 않고 서둘러!). 아직 완료 될 수 있지만 리디렉션을 처리하는 데 약간의 작업이 필요할 것 같습니까? – BrynJ

+0

위의 내용을 추가하면 로그인하지 않은 사용자 (나중에 처리기를 통해)로 로그인하라는 메시지가 나타납니다. – BrynJ

0

이미지를 제공하는 스크립트를 작성한 다음 htaccess를 사용하여 브라우저의 실제 이미지에 대한 액세스를 완전히 제한해야한다고 생각합니다.

스크립트는 이미지에 대한 웹 경로를 가져 와서 사용자에게 액세스 권한이 있는지 결정한 다음 fpassthru와 같은 것을 사용하여 실제 이미지를 브라우저에 제공 할 수 있습니다.

그러나 서빙 스크립트를 참조하려면 이미지에 대한 모든 참조를 수정해야합니다.

그래서 대신이

또는 유사한 무언가를 /image.php?images/123/5423453245.jpg 것 , /images/123/5423453245.jpg와 이미지를 접근.

+0

당신이 말하는 것을 보았습니다.하지만 그것은 정말로 (링크 변경)을 피하기 위해 필요한 것입니다. 그들은 방식으로 이미지가 아닙니다 :-) – BrynJ

3

글쎄, 당신은 추가 당신의 htaccess로 다음

AddHandler php5-cgi .jpg 

당신이 방법의 혼란을 recomending 된 요청을 구문 분석 PHP의 파일을 설정할 수에 다음과 같은 특정 폴더에 대한 아파치 구문 분석 .JPG 파일의를 만들 수 및 특정 검증을하는 것은, 그럼 그냥 PL 여기

는 예를 들어

<?php 
if($validUser) 
    { 
    header("Cache-control: No-cache"); 
    header("Pragma: No-cache"); 
    header("Content-Type: image/jpeg"); 
    //correct picture address 
    $img = imagecreatefromjpeg("2326_b_lil.jpg"); 
    imagejpeg($img); 
    } 
    else 
    { 
    //code for error image 
    } 
?> 

의 표시 할 u'd 올바른 사진과 함께 JPEG 헤더를 반환 당신이 좀 더 광범위한 예제를 원한다면 쉽게 알려 주시기 바랍니다

+0

파일은 일반적으로 이미지가 아니지만 이미지 일 수 있습니다. 귀하의 예제를 생각하고 있어요 - 이미지 파일을 다시 만드는 것보다 readfile을 사용하는 것이 더 낫지 않습니까? (코드가 압축되지 않은 트루 컬러 파일로 변환 된 다음 다시 jpeg로 변환됩니다)? – BrynJ

+0

그냥 파일 데이터를 쉽게로드하고 브라우저로 보내려면이 함수를 사용하면됩니다. 브라우저에 이미지로 이미 jpeg 헤더를 보냈기 때문에이 절차를 간단한 fopen으로 바꾸고 입력을 반향시킬 수 있습니다. – perrohunter