Доступ к файлам в каталоге только по ссылке

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем 4ksner, 8 авг 2014.

  1. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Имеется веб приложение, в котором у каждого дела есть закрепленные файлы. Эти файлы можно скачать пройдя по ссылке из дела (site.ru/uploads/cases/10/file.pdf).
    Имеются различные роли, которые ограничивают доступ к делу.
    Но получается любой пользователь может забить прямой адрес файла и спокойно скачать. А меняя ID дела в УРЛе скачать файлы по всем делам.

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

    Как такое можно реализовать?
     
  2. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    320
    Симпатии:
    116
    Разве это нельзя реализовать при помощи проверки $_SERVER['HTTP_REFERER'] ?
     
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    Все верно, $_SERVER['HTTP_REFERER'] используйте. Проверяйте что в нем. А еще лучше загружать на сервер документы не в оригинальном названии. Хотя бы md5+time ну и можно по папкам разбрасывать месяц,год,число
     
  4. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Я представляю как можно использовать $_SERVER['HTTP_REFERER'] для исполняемых php файлов. А как я буду проверять Рефер для PDF или JPG?
     
  5. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    202
    Симпатии:
    47
    По моему через htaccess можно перенаправить все запросы через php файл
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.401
    Симпатии:
    1.182
    HTTP_REFERER - защита от дурака и не более, подделывается очень легко
    Наиболее правильный вариант генерировать на php (или другом серверном ЯП) временный путь типа symlink - http://php.net/manual/ru/function.symlink.php и по крону symlink`и удалять (файл при этом остаётся там где и лежал до этого)
    В папку с оригинальными файлами запретить доступ из веба
     
    4ksner нравится это.