Авторизация файлов на веб-хостинге

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

/
/documents/
/module1/
/module2/

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


person Boris    schedule 24.01.2012    source источник


Ответы (1)


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

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

Настоящий путь по-прежнему /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"; }
?>

Подробнее здесь

person Daniel    schedule 11.04.2012