К нам в техподдержку иногда приходят обращения с просьбой более подробно описать механизм работы приватного скачивания файлов и также помочь настроить его на определенные директории. [spoiler] На основании данных вопросов появилась идея создания простого компонента, который бы позволял без особых сложностей организовать приватное скачивание файлов на сайте. Результатом стал компонент private.download, который имеет следующие параметры:
Включить поддержку ЧПУ — Позволяет компоненту работать в режиме ЧПУ, результатом могут являться более приятные ссылки, например http://www.mysite.com/examples/my-com...oc.gif Идентификатор имени файла — Если не используется механизм ЧПУ, то в данном поле необходимо указать имя параметра в URL в котором будет передаваться имя файла для скачивания. Путь к директории с файлами — путь к директории с файлами, которые мы хотим защитить. Отдавать файл с помощью nginx (должен быть установлен) — если установлен nginx, то можно установить данный параметр, что разгрузит сервер. Учитывать загрузки в модуле статистике — если установлен модуль статистики, то можно фиксировать скачивания файлов.
При заходе на страницу на которой установлен компонент, мы увидим список файлов, которые мы можем скачать, т.е. у нас есть права доступ на их чтение.
При попытке скачать файл к которому у нас нет доступа мы получи сообщение об ошибке и предложение авторизоваться под пользователем, которые имеет необходимые права доступа к запрашиваемому файлу.
Этот замечательный компонент в кодировке UTF-8 можно скачать здесь
Подразумевается конфигурирование доступа, который мы выставляем из административной части продукта при редактировании свойств файла на закладке доступ.
Гораздо интересней была бы методика организации защищённого хранения файлов. Сейчас в битриксе безопасность недостаточна. Немного и просто улучшить можно запретом прямого доступа к файлам через настройки сервера. Но всё равно будут лазейки при наличии скриптов и мест, позволяющих скачать файл по имени/иду итп без контроля полномочий, буде имя/ид файла известны.
Мне вот интересно, реально ли ограничить не только прямой доступ к каталогу, но и доступ к нему скриптам, кроме каких-то хитрых (какая-то авторизация прописанная в скрипте итп). Задавался этим вопросом, но пока не копал. Есть такие методы? Чтобы не отлавливать потенциально небезопасные скрипты, а просто они не смогли поиметь доступ к каталогу. Написать свой единственный, который туда может стучаться и реализовать в нём все требуемые проверки на доступ.
1) в корне защищенной директории создаете .htaccess файл со строкой deny from all и в целом защита от прямых запросов есть. 2) Запретить для чтения для всех скриптов кроме какого-то конкретного - нет. Как вы себе это представляете? По заказу разрешать выполнение РНР ф-й get_file_content()?
1. я и говорил, что защиту от прямого скачивания организовать легко. 2. а вот и не знаю. почему и спрашиваю, плотно этим вопросом не интересовался. например с помощью какой-нибудь предварительной авторизации у сервера для доступа к каталогу, прописанной только в этом скрипте. выполнять скрипт из под другого системного юзера, который имеет доступ к этому каталогу, а стандартный, под которым крутится всё остальное - не имеет. организовать запись/чтение с каталога вызовом системной утилиты... хз
нет. nginx не будет светить заголовок X-Accel-Redirect клиенту. если это имелось ввиду.
кроме того, как я помню, это не будет работать без соответствующей настройки nginx'a (т.е. без локейшенов internal). хотя может ошибаюсь и как-то nginx себя ведёт и без их наличия, тогда как? не попадалось такой информации.
кстати, это тоже как раз метод запрета скачивания файла по прямой ссылке, без участия .htaccess (ну, если, конечно, апач ещё дополнительно не слушает напрямую по другому порту, так что лучше перестраховаться =) ), так как прямой запрос на интёрнал извне nginx будет пресекать
Правильно ли я понимаю, идём в админку, там "Контент"-"Структура сайта"-"Файлы и папки", выбираем файл, в контекстном меню пункт "Права на доступ продукта". Это об этом идёт речь, т.е. о правах группы на файл?
а как быть если файлы не лежат в одной папке, а загружены через элементы ИБ свойством типа "файл"? неужели после каждой загрузки нужно лезть в аплоад и вручную выставлять права?
С защищёнными файловыми хранилищами под IIS ситуация не такая радужная.
Варианты: - контролируемое скачивание через PHP. Память, время работы скрипта итд. - разграничение прав силами NTFS. Только вот когда права эти нужно добавлять для новых юзеров, а юзеров больше тысячи... да и из web-приложения рулить NTFS разрешениям то ещё удовольствие. - установка nginx перед IIS - кто пробовал?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».