2015-06-15 5 views
0

Возможно ли установить предпочтения файлов/каталогов на моем сервере, чтобы они не были загружаемыми, но если у пользователя есть сеанс, он имеет доступ к файлам и может их загрузить.Разрешить загрузку файлов только с активной сессии

Я знаю, что я могу отключить кнопку «скачать» с $_SESSION, например:

$downloadbutton = "<a href='abc.jpg'>Download</a>"; 
if($_SESSION["xy"] == "abc"){ 
    echo $downloadbutton 
} 

Но можно Acces файл по www.url.com/directpath/abc.jpg

Так как это возможно защитить файлы?

ответ

2

Чтобы иметь больше контроля над загрузкой вы можете использовать следующую функцию:

function makeDownload($file, $dir, $type) { 

header("Content-Type: $type"); 

header("Content-Disposition: attachment; filename=\"$file\""); 

readfile($dir.$file); 

} 
1

Вы можете ограничить прямой доступ путем проверки PHPSESSID печенья в .htaccess:

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} PHPSESSID=[^;] 
RewriteRule .* - [L] 
RewriteRule .* - [F,L] 

Лучше пример с SETENV:

SetenvIf Cookie PHPSESSID=[^;] permit 
Allow from env=permit 
Deny from all 
+1

Спасибо, я постараюсь это. –

1

Если вы хотите, чтобы обеспечить доступ к скачиванию вы никогда не должны фактически служить файлам от их исходного URL-адреса, всегда используйте прокси-файл. Таким образом, пользователь никогда не видит, откуда идет этот файл, и может использовать только ваш прокси-скрипт, где у вас есть контроль над тем, можно ли его обслуживать.

Если вы посмотрите вокруг, есть тонны скриптов, которые уже были написаны специально. Вы можете найти один из них here и добавить к нему свою проверку сеанса.

+1

Спасибо, я думаю, что буду комбинировать этот метод с некоторыми другими методами :) –

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