Простое решение для ограничения доступа к (некоторым) загрузкам и скачиваниям в WordPress

28 мая 2013 г., 00:50:54
Просмотры: 18.3K
Голосов: 16

Исходная ситуация

При настройке сайта я изучал вопрос защиты загрузок/скачиваний и ограничения доступа к ним на основе ролей/возможностей пользователей. Конечно, я прочитал некоторые предыдущие вопросы по этой (общей) теме, для справки самые важные/интересные из найденных:

Дополнительные примечания

Вообще не лишним будет дополнительно улучшить безопасность вашей WordPress установки - например, защитить ваш wp-config.php - есть много вещей, которые можно и нужно сделать. В интернете полно информации о том, как это сделать. В контексте этого вопроса меня в основном волнуют мои загрузки/скачивания.

Загрузки WordPress не защищены, любой может просматривать папку uploads, если вы не предотвратите это с помощью .htaccess:

Options All -Indexes

Файл .htaccess должен быть размещен внутри папки uploads. Но это не совсем защищает файлы, а лишь затрудняет их поиск. Дополнительно можно предотвратить хотлинкинг, по сути ограничивая доступ на основе реферера - хотя это несколько другой случай, я упомянул об этом, но не буду подробно останавливаться, информации об этом предостаточно.

Конечно, есть возможность сделать записи приватными или создать пользовательский тип записи с подходящими файлами шаблонов, чтобы сделать этот тип записи приватным, но это не защищает ваши файлы. То же самое можно сказать об оборачивании файлов в условные конструкции типа is_user_logged_in() или is_admin().

На заметку: существует множество плагинов, которые обещают сделать ваши файлы защищенными, но многие из них лишь создают видимость защиты по причинам, указанным выше. Я обращаю на это внимание, потому что уверен, что не все об этом знают - так что будьте внимательны.

Цель

Моей целью была возможность ограничить доступ к (некоторым) загрузкам и соответственно скачиваниям. И убедиться, что никто посторонний не сможет получить к ним доступ ни случайно, ни зная имя файла - файлы должны быть действительно приватными и защищенными. В конечном счете доступ должны иметь только определенные люди без исключений.

Дополнительно мне не нужно было делать приватным весь сайт - это было бы контрпродуктивно, так как он используется для публичной презентации. Более того, я хотел, чтобы решение было простым в использовании, по той простой причине, что некоторые работающие с ним люди не являются экспертами в компьютерах, как это часто бывает.

Вопрос

Собственно вопрос: существует ли (относительно) простой способ ограничить доступ к (некоторым) загрузкам и соответствующим скачиваниям? И, как я изложил, это означает способ действительно защитить и обезопасить их?

4
Комментарии

Вам следует добавить ваше решение в качестве ответа, а не встраивать его в вопрос.

s_ha_dum s_ha_dum
28 мая 2013 г. 02:00:39

И, пожалуйста, используйте правильный регистр букв. Читается как чат...

kaiser kaiser
29 мая 2013 г. 00:25:10

Спасибо за конструктивную критику, я отредактирую и переструктурирую это в ближайшее время.

Nicolai Grossherr Nicolai Grossherr
29 мая 2013 г. 00:36:24

Мне интересно, что вы думаете об этом плагине? https://preventdirectaccess.com/faq/

Sam Sabin Sam Sabin
28 янв. 2025 г. 03:54:29
Все ответы на вопрос 1
0

Я отвечаю на свой собственный вопрос, потому что нашел решение, но мне очень интересно узнать ваше мнение по этому поводу. Возможно, у вас есть гораздо лучшее решение — если так, я бы очень хотел о нем услышать.

Результаты исследования

В результате исследования я пришел к следующим выводам:
1. Размещать файлы за пределами корневой директории www;
2. Запретить прямой доступ к папке с файлами;
3. Обрабатывать запросы к файлам через скрипт;
Источники для этих пунктов — по крайней мере, в основном — включены в мой вопрос.

Решение

  1. Я установил плагин »wp-downloadmanager«
    • в процессе установки создается папка files внутри wp-content;
  2. Я добавил файл .htaccess в новую папку files:
    • содержимое файла .htaccess:
      Options All -Indexes
      Order Deny,Allow
      Deny from all
  3. Я изменил одну важную настройку плагина:
    • настройка называется download method;
    • я изменил её на output file;
  4. Я добавил несколько файлов через интерфейс плагина:
    • есть опция allowed to download;
    • она позволяет ограничить доступ на основе роли/возможностей пользователя;
  5. Я провел тестирование:
    • нет прямого доступа к файлам — ни через адресную строку, ни через wget;
    • публичные загрузки доступны по их постоянным ссылкам — я выбрал »nice permalinks: yes« и »download url: file id« в панели настроек — доступ через адресную строку/wget тоже работает;
    • защищенные, ограниченные загрузки доступны только для авторизованных пользователей с соответствующими ролями/возможностями;

Заключительные мысли

Я считаю, что решение в целом соответствует результатам исследования. За исключением размещения файлов за пределами корневой директории. Но ограничение доступа к папке и обработка запросов через скрипт реализованы. Ограничение доступа обеспечивается файлом .htaccess, а роль скрипта выполняет плагин wp-downloadmanger.

Дополнительные примечания

  • Крайне важно изменить download method на output file;
  • и, конечно же, обязательно наличие файла .htaccess;

  • чтобы убедиться, что плагин выполняет роль скрипта, взгляните на файл wp-downloadmanger.php — строки с 207 по 227 (версия 1.6.1); это дополнение к приведенной информации.

30 мая 2013 г. 02:37:57