Веб-хостинг авторизации файлов - PullRequest
0 голосов
/ 24 января 2012

Я использую механизм аутентификации на основе PHP для разрешения / ограничения доступа к некоторым частям моего сайта (папка module1 , module2 и т. Д.), Но у меня проблема с ограничениемдоступ к файлам.Я использовал папку documents (см. Ниже) для размещения некоторых загружаемых файлов.Ссылки на эти файлы появляются в index.php (размещается в каталоге root ).Однако если по какой-то причине неавторизованный пользователь получит URL-адрес файлов, хранящихся в документах , он сможет его загрузить.

/
/documents/
/module1/
/module2/

PS: так как это веб-сайт интрасетиЯ ограничил доступ к документам по IP-адресам, но все еще есть небольшие шансы, что кто-то использует ПК с разрешенным IP-адресом, и у него есть URL-адрес документа.

1 Ответ

0 голосов
/ 11 апреля 2012

Используйте какой-нибудь прокси-скрипт PHP, который будет обслуживать файл для пользователя без указания реального местоположения источника.

Затем пользователь увидит http://yourdomain.com/download.php?file=mydoc.docx

Реальный путьstill /documents/userid/2342/mydoc.docx или как там выглядит ваша структура.

Затем пусть ваш файл download.php обслуживает файл следующим образом:

<?php
// Validate the user here

// Set document root
$root = 'documents/userid/'.$userID.'/';

// Requested file
$file = $_GET['file'];

// Validate
if (file_exists($root . $file))
{
    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/force-download");
    header("Content-Disposition: attachment; filename=\"".basename($file)."\";");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($root . $file));

    ob_clean();
    flush();
    readfile($root . $file);
}
else { echo "File not found"; }
?>

См.больше здесь

...