Я использую WordPress для частного сайта, где пользователи загружают файлы. Я использую «Private WordPress», чтобы запретить доступ на сайт, если пользователь не вошел в систему.
Я хотел бы сделать то же самое с файлами, загруженными в папку загрузки.
Таким образом, если пользователь не вошел в систему, он не сможет получить доступ к:
https://xxxxxxx.com/wp-content/uploads/2011/12/xxxxxxx.pdf. Если они пытаются получить доступ, но не зарегистрированы, их следует перенаправить, например, на страницу входа.
Я нашел плагин с именем private files, но последний раз обновлялся в 2009 году, и он, похоже, не работает на моем WordPress.
Кто-нибудь знает какой-нибудь метод? Способ хотлинкинга будет достаточно, чтобы защитить это?
Я также нашел этот метод:
# 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, может передать это право?
С уважением
Вы можете написать плагин, используя хук
init
и$_GET['file'];
. Если у пользователя есть это get-значение, перейдите в функцию для проверки прав доступа к файлам: например, с помощью флажка в Meta Box.Функция get_file()
Вы также можете добавить пользовательский URL для файлов через хук
generate_rewrite_rules
Если вам нужен подход на основе плагинов для решения этой проблемы, вот довольно хорошее решение, которое я (наконец-то) нашел:
Обратите внимание на предоставленный для вас шорткод «Скачать» (например, сохранить в Блокнот). Обратите внимание, что файл сохраняется в
/wp-content/uploads/dlm_uploads/
Это означает, что любой, кто не вошел в систему, не может ни загрузить файл, ни увидеть реальный URL-адрес файла. Если в случае, если неавторизованный определит URL-адрес файла, плагин также останавливает пользователей, просматривающих реальный URL-адрес файла, блокируя доступ к папке
/wp-content/uploads/dlm_uploads/
.Проверка только того, существует ли cookie, не является строгой защитой.
Чтобы получить более надежную защиту, вы можете передать или «прокси» все запросы в загруженную папку (пример
uploads
в следующем примере) через скрипт php:Все запросы к загруженным файлам (включая изображения в сообщениях) будут отправляться в
dl-file.php
, который затем может проверить, вошел ли пользователь в систему или нет.Если пользователь не вошел в систему, будет показана форма входа в систему вашего сайта. После того как пользователь войдет в систему, он будет перенаправлен обратно в файл и сможет загрузить его сейчас.