За последние 24 часа нас посетили 22814 программистов и 1234 робота. Сейчас ищет 731 программист ...

Запрет на прямой доступ к личным файлам

Тема в разделе "PHP для новичков", создана пользователем skitskis, 21 янв 2018.

  1. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    Добрый день!

    Необходимо запретить прямой доступ к фалам для неавторизованных пользователей сайта. Сам сайт полностью закрыт, попасть на него возможно только после авторизации (после авторизации записываем данные пользователя в $_SESSION). Пользователь может загрузить на сайт свои фалы (картинки, pdf, архивы, word, exelи т.д.).

    Если знать прямой путь к фалу, то его можно просматривать без авторизации. Как более грамотно защитить фалы пользователя от прямого доступа, но оставить возможность скачать файл авторизованному?

    Спасибо!
     
  2. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    не показывать прямых путей на сайте никому. отдавать файл средствами php по запросу. форму (кнопку, ссылку) запроса скрыть от неавторизованных пользователей.
     
  3. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    Это понятно, но допустим, человек подберет путь к фалу... имя_сайта.ру/files/images/1.jpg

    А можно через htaccess проверить наличие сессии? Если она есть, отдать файл, если нет, то перекинуть на авторизацию.
     
  4. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    не используй банальные названия пути к файлам.
    через htaccess можно только запретить доступ по прямым ссылкам
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Через внешнюю карту можно. См мануал по рерайтеру.
     
  6. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    не отдавайте файлы по прямым ссылкам, а только через скрипт..
    загружаемым файлам давайте название что то типа хеша..
    в базе храните имя файла и скриптом генерируйте отдачу файла..
    там можно сделать и контроль прав доступа..
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    @Алекс8 слава яйцам на нашем ресурсе есть великолепный человек, которого когда-то давно величали богом рерайтера по вкладу помощи в головы посетителей сего ресурса. И божество рерайтера сейчас тебе претензию глаголить будет:
    Нахера, сын мой, ты пхп-машину запускаешь для отдачи статического контента, когда эту всю муйню можно переложить на разрешение запроса рерайтером?
     
    Алекс8 нравится это.
  8. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    :D
    ну у меня еще один вариант)) плюс можно вести подсчет кто когда что скачал))
    бывает полезно)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    журналы веб-сервера уже не котируются? а твой скрипт будет просто ридфайл (только не говори что эхо файл_гет_контентс) или как у нормальных мужиков с блекджеком, шлюхами, рейнджами и докачкой?
     
    Алекс8 нравится это.
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А еще лучше - вообще не хранить такие файлы в каталогах, мапящихся на URL. Тогда и подбирать не надо будет ничего - это будет физически невозможно.
     
    Алекс8 нравится это.
  11. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    ну вот к примеру у меня есть клиент у которого форум где много вложений.. вложения это минусовки для музыкантов, он продает доступ к ВИП разделу, и ему надо контролировать кто что сколько скачал.. лимиты какие то там есть)
    мой вариант для этого мне кажется подходит))
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Хороша ложка к обеду. Просто отдача статики делается сервером без проблем. Хитровыбоенная отдача - средствами PHP. Порой, так действительно проще. И портабельнее.
    --- Добавлено ---
    В конце концов, если хостинг на SSD, а отдача идет, скажем, чанками, прочитать пыхой, не ставя блокировку, пару мегабайт, и плюнуть nginx-у в поток - это почти бесплатно и мгновенно. А там уже хоть трава не расти.

    Главное, если не клиент чанки просит, а ты просто отдачу так дробишь, чтобы, в случае, например, отказа клиента, не продолжать читать крупный файл и повысить отклик, выключай буферизацию вывода в этот момент :D

    А то можно с одного запроса оперативку всю просрать и сервер в своп положить. Проверено.
     
    Алекс8 и Ganzal нравится это.
  13. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Вариант прочитать запрос и отдать ссылку на файл.
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Удивлён, что никто из защитников отдачи файлов пхп-скриптом не сказал про X-Sendfile... Вы все читаете файл пхп-машиной и отдаёте его содержимое веб-серверу, чтоб тот его уже отдал клиенту?
     
    Алекс8 нравится это.
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Не помню какой, но косяк с ним был, из-за которого мне пришлось от него отказаться. Ну и как факт, не хочется тащить в проект лишние зависимости от внешнего ПО.
    --- Добавлено ---
    Во, как у него с чанками-ренджами нонче?