2015-06-19 3 views
3

У меня есть файл PDF на моем сервере, и есть страница PHP, чтобы принудительно загрузить файл PDF после некоторой проверки достоверности, например проверки пароля, но если пользователь может знать прямая ссылка файла PDF, которую им удается просмотреть/загрузить, без проверки подлинности.PHP - Защита доступа к PDF-файлу по прямой ссылке

Есть ли способ защитить доступ к файлу PDF по прямой ссылке, например http://domain.com/mypdf.pdf?

+0

HTTP Basic Auth? Что вы пробовали? – CD001

+0

используйте .htaccess в папке, где хранятся ваши файлы. .htaccess может отрицать все прямые запросы. – Salar

+0

@Salar Можете ли вы написать htaccess-код здесь, который может блокировать весь доступ из прямой ссылки? – wkyip

ответ

1

Используйте этот код ...

Лучше всего было бы, чтобы защитить эту папку с htaccess, как вы упомянули. Таким образом, вы кладете все PDF-файлы в папке pdf/, и в той же папке pdf вы положили .htaccess файл:

RewriteEngine on 
RewriteRule .* your-php-script.php 

Теперь файлы не могут быть доступны по URL в этой папке. Каждый запрос к файлу в этой папке возвращает возвращаемый сценарий your-php-script.php. В your-php-script.php вы делаете что-то вроде этого: -

//Check if user has right to access the file. If no, show access denied and exit the script. 
$path = $_SERVER['REQUEST_URI']; 
$paths = explode('/', path); 
$lastIndex = count($paths) - 1; 
$fileName = $paths[$lastIndex]; // Maybe add some code to detect subfolder if you have them 
// Check if that file exists, if no show some error message 
// Output headers here 
readfile($filename); 
+0

Я не пробовал это, но не приведет ли это к нечитаемому «мусору», если вы не установите правильный HTTP-заголовок для типа файла, который вы выкладываете с помощью 'readfile()'? Или браузер создаст диалоговое окно * download file *? – CD001

+0

если у вас есть сомнения Ссылка на это http://php.net/manual/en/security.php – Bruce

+0

Я действительно не задавал вопрос о модели безопасности - просто, если вы печатаете PDF в выходной буфер, не сообщив сначала, что это PDF ('header ('Content-Type' ...') ... что происходит? – CD001

Смежные вопросы