2014-04-20 4 views
1

У меня есть веб-сайт, и я хочу, чтобы только зарегистрированные пользователи могли скачать конкретный файл. Для этого я следующую структуру:PHP: Разрешить загрузку файла только авторизованным пользователям

В каталоге, где я, имеющий оригинальный установочный файл, я создал файл .htaccess с:

Order Deny,Allow 
Deny from all 

И из файла под названием download.php, Я называю этот файл, используя:

<?php 
$filename = "127.0.0.1/eye/setup/setup.msi"; 
if(ini_get('zlib.output_compression'))ini_set('zli b.output_compression', 'Off'); 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".filesize($filename)); 
readfile("$filename"); 
exit(); 
?> 

Но, проблема: Если кто-нибудь знает точное местонахождение моего файла, он/она может легко настроить подобный PHP файл на его/ее сервер, передавая $ имя файла как оригинальное местоположение. Итак, как я могу полагаться на этот скрипт для обеспечения безопасности?

Есть ли еще стратегия?

+0

Защита паролем с использованием '.htaccess/.htpasswd' или использование базы данных с зарегистрированными пользователями. –

+0

Ваш вопрос сводится к: как я могу отличаться между авторизованным пользователем и неавторизованным пользователем. Ответ: вам нужно администрирование пользователей, управление сеансом, и вам необходимо ограничить определенные действия сеансами с ранее прошедшим аутентификацию пользователем. – arkascha

ответ

2

Одним из решений является сохранение папки для скачивания за пределами DocumentRoot. А потом download.php просто прочитать его, используя локальный путь:

$filename = "/path/to/eye/setup/setup.msi"; // or build filename using $_GET 

Затем этот PHP код будет читать содержимое нужного файла из локального пути и установить соответствующий тип содержимого.

0

Вы можете сделать свой каталог, защищенный паролем с помощью htpass в htacess файла. С помощью этого htpass in htacess

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