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

4 апр. 2011 г., 13:30:20
Просмотры: 27.7K
Голосов: 12

У меня есть закрытая область на сайте, доступ к которой могут получить только авторизованные пользователи. Для этого я создал шаблон страницы с условием 'current_user_can()'.

Проблема в том, что документы, прикрепленные к закрытым страницам, всё еще доступны любому пользователю, если вставить полный путь в адресную строку браузера.

Есть ли способ ограничить доступ к загруженным файлам?

РЕДАКТИРОВАНО: Хочу уточнить, файлы должны быть доступны только авторизованным пользователям.

0
Все ответы на вопрос 5
8

Это не совсем вопрос по WordPress, но вы можете добавить правило перезаписи, чтобы запретить доступ, если источник запроса не ваш домен.

[Обновление]

Вам нужно сделать две вещи:

  1. Добавить правило перезаписи (либо напрямую через .htaccess, либо используя WP_rewrite (Справка Codex). Цель здесь - запретить запросы к вашим документам, у которых в качестве источника указан не ваш домен. Это предотвращает возможность вставки ссылки напрямую в адресную строку браузера.

  2. Обернуть ваши ссылки для скачивания в условный блок is_user_logged_in (Справка Codex) - таким образом они будут отображаться на странице только для авторизованных пользователей.

Пример кода доступен в связанном вопросе:

4 апр. 2011 г. 14:06:02
Комментарии

Привет anu, реферер должен быть с моего домена + посетитель должен быть зарегистрированным и подключенным пользователем. Я считаю, это вопрос WP.

mike23 mike23
4 апр. 2011 г. 15:16:03

Похоже на вопрос к htaccess.

curtismchale curtismchale
4 апр. 2011 г. 17:49:26

Я обновлю свой ответ

anu anu
4 апр. 2011 г. 19:41:05

Привет anu, да, это не отображает файлы, если пользователь не авторизован, но что если пользователь угадает имя файла? Он все равно сможет получить к нему доступ! И это то, чего я хочу избежать. Приведу пример: допустим, у нас есть корпоративный сайт с публичными документами (report2011.pdf, report2010.pdf и т.д.) и приватными документами (report2009.pdf, report2008.pdf). Даже если приватные документы не отображаются на публичном сайте, кто-то может легко угадать имена файлов (основываясь на структуре публичных) и таким образом получить доступ к приватным документам, просто введя URL в адресную строку.

mike23 mike23
7 апр. 2011 г. 17:35:39

Это именно то, что предотвращает правило rewrite

anu anu
7 апр. 2011 г. 19:39:47

Будет ли это работать, если у меня нет домена как такового... То есть я получаю доступ к своему блогу через IP-адрес?

user3047 user3047
9 июн. 2011 г. 20:25:39

Два слова: подмена реферера. Ваше решение — не более чем «безопасность через неясность»: злоумышленник не сможет получить доступ к медиафайлу, если он знает полный URL к нему. Вместо этого теперь ему нужно знать один из допустимых URL рефереров. Что мы выиграли, кроме увеличения административной сложности? По моему мнению, ничего. На момент написания этого текста существуют «тысячи» плагинов для защиты страниц и записей, но в Wordpress по-прежнему отсутствует полезная защита для медиафайлов. Разработчики Wordpress (и плагинов) избегают этого, так как знают о последствиях.

User User
11 мар. 2012 г. 12:09:42

Это вполне себе вопрос по Wordpress, даже если на него нет ответа в рамках Wordpress. Уже почти 2019 год. :(

bogl bogl
13 дек. 2018 г. 11:55:05
Показать остальные 3 комментариев
1

Я бы изменил каталог загрузки на расположенный вне папки www. Затем вы "отправляете" файл с использованием "прокси"-страницы. Прокси-страница проверяет, авторизован ли пользователь, и затем отправляет файл с помощью header()/readfile().

27 сент. 2011 г. 02:03:28
Комментарии

Знаю, что это старый вопрос, но можно ли сделать демонстрационный пример?

klewis klewis
28 мар. 2024 г. 17:16:58
1

Вы можете использовать защиту от хотлинкинга с помощью вашего веб-сервера.

Смотрите ответ на StackOverflow:
https://stackoverflow.com/questions/1775582/apache-hotlink-protection-for-download-folder.

Это использует .htaccess в apache2.

По сути, вы запрещаете загрузку, если пользователь не пришел со страницы вашего блога!

9 июн. 2011 г. 00:36:14
Комментарии

У меня нет опыта в этом... есть идеи, что мне нужно положить в мой .htaccess файл?

user3047 user3047
9 июн. 2011 г. 01:05:31
0

Это сработало для меня. Вы можете ограничить доступ к папке wp-content/upload (за исключением авторизованных пользователей), создав файл .htaccess и добавив следующее правило перезаписи:

# Отключить просмотр содержимого директорий
Options -Indexes

# Перенаправлять неавторизованных пользователей на страницу входа
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule \.(pdf|jpg)$ /wp-login.php [L,R=302]
21 сент. 2023 г. 09:03:49
2

Плагин "Registered User Only" просто проверяет, вошел ли посетитель в систему, прежде чем показать содержимое страницы. Доступ к файлам через браузер контролируется сервером.

Вы можете попробовать плагин WP AskApache Password Protect - http://wordpress.org/extend/plugins/askapache-password-protect/

Конечно, это будет работать только если ваш блог WordPress размещен на сервере Apache.

9 июн. 2011 г. 00:45:53
Комментарии

Не уверен, как использовать этот плагин. Есть идеи, какие опции нужно выбрать?

user3047 user3047
9 июн. 2011 г. 01:04:53

Плагин больше не доступен. Он был закрыт из-за проблемы с безопасностью.

JakeParis JakeParis
16 июл. 2024 г. 23:52:31