У меня есть очень специфический случай использования, когда сайт создан для адвоката, и каждый из его клиентов может войти на свою собственную «определенную страницу / портал» (пользовательский тип сообщения) без возможности доступа к wp-admin и т. Д. (Я создал все страницы входа / регистрации / редактирования профиля в интерфейсе). На этой странице / портале юрист оставит сообщения и файлы для загрузки клиентом , теперь, теоретически, один клиент может угадать (или, если знает о файлах другого клиента) другие имена файлов и загрузить их, создавая таким образом проблему с конфиденциальностью / безопасностью. / конфиденциальный материал и т. д.
Я ищу идеи / концепции для решения, моей первоначальной мыслью было, чтобы ссылка на скачивание указывала на какой-то файл download.php, отправляющий идентификатор вложения, идентификатор пользователя, идентификатор страницы / портала и одноразовый номер, а затем обрабатывал их на другом конце. ,
что вы думаете? я на правильном пути или этот подход имеет недостатки?
Благодарность!
Ответы:
Что должно произойти, это то, что вам нужно прокси-запросы на загрузку для типов файлов, которые вы хотите через WordPress. Предположим, вы собираетесь ограничить доступ к файлам ".doc".
1. Определите переменную запроса, которая указывает запрошенный файл
2. Обновите .htaccess для пересылки запросов на запрещенные файлы в WordPress
Это будет захватывать запросы к файлам, которые вы хотите ограничить, и отправлять их обратно в WordPress, используя указанную выше переменную запроса. Вставьте следующее правило перед
RewriteCond
строками.3. Захват запрошенного имени файла в пользовательскую переменную запроса; и проверьте доступ к файлу:
NB Это решение работает для одноузельных устанавливается только ! Это связано с тем, что WordPress MU уже перенаправляет запросы загруженных файлов на дочерние сайты
wp-includes/ms-files.php
. Существует также решение для WordPress MU, но оно немного сложнее.источник
intercept_file_request
или она вызывается в любом месте, как эта функция запускается?wp
, я обновил пример.У меня недавно была связанная проблема, и я написал эту статью об этом .
Я предполагаю, что загружаемые файлы загружаются с помощью медиа-обработки WordPress, иначе у вас есть идентификатор вложения для загрузки.
План решения
.htaccess
чтобы блокировать любые попытки доступа непосредственно файлы в директории загрузок (или подкаталог таковой) - например , черезmysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Предостережения
.htaccess
для обеспечения безопасности . Если это недоступно / включено (например, на серверах nginx), вы не получите особой безопасности. Вы можете запретить пользователю просматривать каталог uplods. Но прямой доступ будет работать.Блокировка прямого доступа
Для этого в папке загрузки (или подпапке - весь конфиденциальный материал должен находиться на любой глубине внутри этой папки). Поместите
.htaccess
файл со следующим:Далее я предполагаю, что вы будете прикреплять конфиденциальный материал к типу записи «клиент». Все медиафайлы, загруженные на страницу редактирования клиента, будут храниться в
uploads/conf/
папке.Функция для настройки защищенного каталога загрузок
Загрузка конфиденциального материала
Сделав это, загруженный контент должен быть внутри,
uploads/conf
и попытка доступа к нему напрямую через браузер не должна работать.Загрузка контента
Это легко. URL-адрес загрузки может быть чем-то
www.site.com?wpse26342download=5
(где 5 - идентификатор вложения загруженного контента). Мы используем это, чтобы определить вложение, проверить права доступа текущего пользователя и разрешить его загрузку.Сначала настройте переменную запроса
Теперь настройте слушателя, чтобы (возможно) вызвать загрузку ...
Заключительные комментарии
Приведенный выше код может содержать ошибки / синтаксические ошибки и не проверен, и вы используете его на свой страх и риск :).
URL-адрес загрузки может быть «предварительно подтвержден» с помощью переписывания. Как указано в комментариях, вы можете добавить пробел
index.php
внутри каждого дочернего элемента защищенной папки, чтобы предотвратить просмотр, но в.htaccess
любом случае это должно быть предотвращено правилами.Более безопасный способ - хранить публичные файлы вне публичного каталога. Или на внешнем сервисе, таком как Amazon S3. Для последнего вам потребуется сгенерировать действительный URL для получения файла из Amazon (используя ваш закрытый ключ). Оба из них требуют определенного уровня доверия к вашему хосту / стороннему сервису.
Я бы с осторожностью использовал любые плагины, которые предлагают «защищенные загрузки». Я не нашел ни одного, обеспечивающего достаточно хорошую безопасность. Пожалуйста, не будьте осторожны с этим решением - и я буду рад любым предложениям или критике.
источник
Возможно, вы знали этот трюк. Этот код проверит текущее имя пользователя, вошедшего в систему, и, если он совпадет, отобразит ссылку на скачивание этого файла, иначе он ничего не отобразит.
вот код:
Однако это не будет хорошим подходом, так как файлы хранятся на серверах, любой, у кого есть ссылка, может скачать этот файл.
источник
Я предполагаю, что эта информация является конфиденциальной, и поэтому помимо скрытия ссылок на файлы, вы захотите сделать их полностью недоступными для любого пользователя в Интернете, даже если он должен был угадать URL, если только у этого пользователя нет явного разрешения на загрузку. файлы.
Рассмотрите возможность безопасного хранения файлов на Amazon S3 и затем предоставьте предварительно подписанные (ограниченные по времени) URL-адреса для файла при условии, что были выполнены правильные проверки безопасности (т. Е. Пользователь вошел на ваш сайт и является тем, кем, по его словам, он является).
Существует очень хороший AWS SDK, который делает это очень просто.
Вам нужно изучить, как вместо этого отправлять файлы, загруженные через интерфейс загрузки WP, в S3, или создать собственный загрузчик .
Другие варианты будут слишком заглядывать в код WP электронной коммерции . Они предлагают безопасную загрузку файлов программного обеспечения (например, MP3). Я считаю, что файлы конвертируются в хэши с ключом шифрования, который генерируется для каждого пользователя при покупке. Это потребует некоторого расшифровки, чтобы увидеть, как это работает, но процесс не будет уникальным для этого плагина, поэтому другие примеры будут доступны (где-то).
источник
Я думаю, что шифрование файлов - это путь, подобный приведенному выше ответу. На Wordpress.org есть плагин, который позволяет защищать загрузки. http://wordpress.org/extend/plugins/download-protect/ Вы также можете использовать сервис amazons или google drive. Существует множество сервисов, предлагающих защищенные загрузки, такие как Drop Box.
источник