Я использую WordPress для частного сайта, где пользователи загружают файлы. Я использую «Private WordPress», чтобы запретить доступ на сайт, если пользователь не вошел в систему.
Я хотел бы сделать то же самое с файлами, загруженными в папку загрузки.
Поэтому, если пользователь не вошел в систему, он не сможет получить доступ к: https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf, если он попытается получить доступ, но не вошел в систему, ему следует например, быть перенаправленным на страницу входа.
Я нашел плагин под названием личные файлы, но последний раз обновлялся в 2009 году, и он, похоже, не работает на моем WordPress.
Кто-нибудь знает какой-нибудь метод? Hotlinking метод будет достаточно, чтобы защитить это?
Я также нашел этот метод:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*uploads/private/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . /index.php [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Но тогда любой пользователь, который копирует cookie, может передать это право? С уважением
источник
Ответы:
Только проверка, существует ли cookie, не является строгой защитой.
Чтобы получить более надежную защиту, вы можете передать или «прокси» все запросы к загруженной папке (пример
uploads
в следующем примере) через скрипт php:Все запросы к загруженным файлам (которые включают в себя изображения в сообщениях) будут направлены на то,
dl-file.php
что затем может проверить, вошел ли пользователь в систему или нет.Если пользователь не вошел в систему, будет отображена форма входа ваших сайтов. После того, как пользователь вошел в систему, он будет перенаправлен обратно в файл и может загрузить его сейчас.
Примерные
dl-file.php
.Нечто подобное можно найти в
\wp-includes\ms-files.php
вашей установке WordPress, но это для мультисайта и без проверки входа и перенаправления.В зависимости от того, сколько трафика у вас есть, это может быть мудрым , чтобы лучше интегрировать это с вашим сервером, например ,
X-Accel-Redirect
илиX-Sendfile
заголовков.источник
Вы также можете написать плагин, используя
init
hook и get-value$_GET[ 'file' ];
. Если у пользователя есть это get-значение, перейдите в функцию для проверки прав доступа к файлам: например, с помощью флажка в Meta Box.функция get_file ()
Вы также можете добавить пользовательский URL для файлов через хук
generate_rewrite_rules
источник
Если вам нужен подход на основе плагинов для решения этой проблемы, вот довольно хорошее решение, которое я (наконец) нашел:
https://wordpress.org/plugins/download-monitor/
/wp-content/uploads/dlm_uploads/
Это означает, что любой, кто не вошел в систему, не может ни загрузить файл, ни увидеть реальный URL-адрес файла. Если в случае, если кто-то неавторизованный выяснит URL-адрес файла, плагин также останавливает пользователей, просматривающих реальный URL-адрес файла, блокируя доступ к
/wp-content/uploads/dlm_uploads/
папке.Бонус: если вы делаете это для сайта, где вам нужно, чтобы пользователи могли входить в систему только как «участники» (но не имеют прав WordPress, таких как редактирование страниц или администратор), установите плагин «участники» https: // wordpress .org / plugins / members / , создайте новую роль пользователя с именем «Member» и предоставьте ей единственную возможность «чтения», создайте нового пользователя в WordPress и убедитесь, что ему назначена роль «Member».
Если вы хотите защитить содержимое страниц, плагин «Участники» предоставляет некоторые опции или есть другие плагины. Если вы хотите, чтобы страница входа для участников отображалась лучше, чем форма входа в WordPress по умолчанию, используйте что-то вроде «Тема моего входа»: https://wordpress.org/plugins/theme-my-login/
источник