2011-01-29 10 views
3

사용자가 .jpg, .pdf .doc .xls 파일을 자신의 계정으로 내 웹 서버에 업로드 할 수있게 한 다음 나중에 파일 이름을 클릭하여 해당 문서를 볼 수 있습니다. 브라우저 또는 .doc .xls의 경우 기본 브라우저 프롬프트를 통해 다운로드합니다.파일의 URL 경로 숨기기 또는 난독 처리

URL 경로를 숨기거나 흐리게 처리하여 다른 계정/사용자로부터 파일을 안전하게 유지하기 위해 파일에 도달하기위한 정확한 경로를 알지 못하도록하고 싶습니다. 주요 목적이다

http://dev.site.com/1_68_1295980609myfile.pdf 

: 좀 더 뭔가에 URL을 숨길 수있는 방법

http://dev.site.com/administrator/account_files/1/documents/property_docs/1_68_1295980609myfile.pdf 

: 내가 PHP를 사용하고

, 아파치 여기

입니다 예 경로 "administrator/account_files/...."에 대한 참조를 제거하십시오.

apach에 뭔가가 있습니까? 내가 할 수있는 e의 mod_rewrite? 사람들이 php의 readfile()을 사용하고 다른 페이지를 사용하는 몇 가지 다른 게시물을 읽었지만 이런 식으로 성능 문제가 있는지 궁금합니다.

귀하의 조언에 감사드립니다.

답변

0

경로를 읽고 저장하려면 테이블을 만들어야합니다. 예를 들어, http://bit.ly과 같은 사이트의 작동 방식을 살펴보십시오. 본질적으로 그들은 URL에 고유 한 문자열을 할당하고 이것이 사용자가 원하는 것입니다.

URL을 단축하여 패스를 마스크 할 수있는 PHP 스크립트가 많이 있습니다. 바로 Google search입니다.

+0

은 bit.ly 여전히 원래 URL로 리디렉션합니다. 이는 짧은 URL의 사용자가 리디렉션 후에도 긴 URL을 계속 볼 수 있음을 의미합니다. 이 단계를 건너 뛰고 짧은 URL을 통해 파일 데이터를 보내면 실제 경로가 완전히 숨겨지는 것이 좋습니다. – GolezTrol

+0

저는 여러분이 정확히 bit.ly라고 말하지는 않습니다. bit.ly와 URL 리디렉터가 어떻게 작동하는지 보는 것은 라우팅 테이블의 포인트를 볼 수 있도록하는 것입니다. 그렇게하면 PHP의 readfile() 함수를 사용하여 파일의 내용을 가져 와서 제공 할 수 있습니다. –

0

일부 성능이 들지만 readfile을 사용하면 실제 문제가 발생하지 않을 수 있습니다. 오버 헤드가 많지 않습니다. 어쨌든 파일을 읽어야하므로 PHP 스크립트를 실행하는 데 약간의 오버 헤드가 발생합니다.

나는 이것을한다. 웹 루트 외부의 폴더 나 .htaccess로 암호로 보호 된 폴더에 파일을 저장하도록 선택할 수도있다. 두 기술 모두 readfile이 파일을 읽지 못하게하므로 실제 파일을 외부에서 읽지 못하게하는 좋은 방법입니다.

+0

글쎄, 지금은 브라우저 창을 여는 자바 스크립트를 사용하고 거기에 파일에 대한 URL이 있습니다. 내가 이것을 view myFile처럼하면 ... openfile.php 페이지에서 sql이나 path traversal injection을 정화한다. -> readfile ("myfile.pdf") -> 그런 다음 브라우저로 출력한다. 이 프로세스는 상당한 성능 오버 헤드가 될 것인가 ... 아니면 괜찮은가 ... 내가해야 할 다른 방법이 있는가? 도와 주셔서 감사합니다. – Ronedog

0

해당 파일을 다운로드 PHP를 강제해야한다 :

<?php 
$file = 'path/to/your/file.zip'; 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/zip"); // change to a specific mime type 
header("Content-Transfer-Encoding: binary");