Автоматически ограничить доступ к загрузчику/администратору на Wordpress - php


0

Я пытаюсь ограничить доступ к файлам, загруженным через PHP/формы. Доступ должен быть предоставлен только загрузчику + администратору. Я не могу помешать людям использовать прямые ссылки для доступа к файлам в библиотеке мультимедиа. Процесс должен быть автоматизирован, с этой защитой по умолчанию.

Я ищу что-то безопасное/надежное. У меня есть реляционная база данных, чтобы проверить, кто загрузил изображение.

Я пытался использовать .htaccess для перенаправления на страницы PHP, и ни одно из этих решений не сработало. Сделайте изображения приватными в Wordpress

RewriteRule ^(.*.(jpg|gif|png))$ isAuthenticated.php?path=$1 это, в частности, было бы здорово, если бы я мог заставить его работать. У меня нет опыта отладки или написания кода .htaccess, и я не нашел много ресурсов в Интернете.

  •  55
  •  2
  • 11 май 2020 2020-05-11 10:17:20

2 ответа

0

Я пишу это, потому что я видел много дезинформации в Интернете, и, возможно, это кому-нибудь поможет. Я узнал, что мой вопрос на самом деле не имеет ответа. Любой файл, хранящийся в public_html, может быть доступен по ссылке напрямую. Например, www.exampleurl.com/myfile100.jpg - никто не может запретить кому-либо вводить прямую ссылку и получать доступ к файлу. Даже на Google Диске, если вы знаете URL-адрес файла, вы можете получить к нему доступ, не входя в систему.

Я хранил изображения в библиотеке мультимедиа WP, что было ошибкой для того, кто пытался сделать изображения/файлы приватными, потому что ссылку легко угадать. WP хранит изображения как 1.jpg, 2.jpg, 3.jpg и т.д. Путь к файлам также хорошо известен: /wp-content/uploads/file#.fileext. Таким образом, если один человек загружает файл в WordPress с именем файла "547.jpg", он может изменить его на "548.jpg" и получить доступ к личным данным. Я повторяю: нет способа остановить кого-то от этого.

Вот обходной путь: Я закончил тем, что создал новый каталог mkdir(ABSPATH.$folderPath, 0755, true); ПапкаPath создается динамически, а уникальное имя файла сохраняется в базе данных, что крайне затрудняет кому-то угадывать прямую ссылку.

теперь моя ссылка выглядит как myurl.com/16/23/randomlettersanddnumbers.ext, поэтому люди не могут изменить URL-адрес и легко получить доступ к чему-то другому. Надеюсь, это поможет кому-то!

0

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

Вам нужно добавить следующий код в файл WordPress functions.php или в плагин для сайта.

// Limit media library access

add_filter( ajax_query_attachments_args, wpb_show_current_user_attachments );

function wpb_show_current_user_attachments( $query ) {
    $user_id = get_current_user_id();
    if ( $user_id && !current_user_can(activate_plugins) && !current_user_can(edit_others_posts
) ) {
        $query[author] = $user_id;
    }
    return $query;
} 

Этот код использует функцию current_user_can, чтобы проверить, есть ли у пользователя возможность активировать плагины или редактировать посты других пользователей. Если они этого не делают, он изменяет запрос, используемый для отображения мультимедийных файлов, и ограничивает его идентификатором пользователя.

Также для защиты хотлинкинга изображений вы можете использовать это в своем .htaccess

#disable hotlinking of images with forbidden or custom image option
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yourdomain.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]
RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L] 

Этот код позволяет отображать изображения только в том случае, если запрос исходит от yourdomain.com или Google.com. Не забудьте заменить yourdomain.com собственным доменным именем.

  • 11 май 2020 2020-05-11 10:17:21