Как запретить прямой доступ к файлу незалогиненым пользователям?

Доброго времени суток.
Есть база данных (mySQL), в ней хранится информация о платежах, счетах и т.п. Управление базой осуществляется через PHP-приложение. К счетам прикреплены файлы (сканы квитанций, договоров).
Проблема: файл должен быть доступен для просмотра/скачки только авторизированным пользователям в виде кода на странице:<img src="http://site.ru/data/contracts/1234.png">, а он доступен также по прямому url http://site.ru/data/contracts/1234.png
Можно ли как-то закрыть доступ по прямому url к файлу?
Интересует решение для apache и nginx.
  • Вопрос задан
  • 4270 просмотров
Решения вопроса 1
BoneFletcher
@BoneFletcher
Для nginx — X-Accel-Redirect
header('X-Accel-Redirect: ' . $file);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
exit;

Для apache — XSendFile
header('X-SendFile: ' . realpath($file));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
exit;

habrahabr.ru/post/151795
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Отдавайте через php с проверкой авторизации...
А саму директорию deny all
Ответ написан
Комментировать
fornit1917
@fornit1917
Отдавать напрямую через php не самый лучший вариант. Гораздо лучше использовать nginx и X-Accell-Redirect
www.opennet.ru/base/net/nginx_x_accel_redirect.txt.html
Ответ написан
Комментировать
iswitch
@iswitch
Geek, Programmer, ????
Если сервер nginx, то вот отличное решение habrahabr.ru/post/37686
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы