Как предотвратить прямой доступ к файлу по URL-адресу?

Я использую Apache, и у меня есть образец веб-папки на моем локальном хосте, например:

      http://localhost/test/

Файлы в папке test:

     index.html  
     sample.jpg  
     .htaccess  

Образец источника index.html:

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

Когда я запускаю веб-сайт по адресу http://localhost/test/, он просто показывает изображение `sample.jpg' на странице.


Проблема:

  • Я хочу, чтобы изображение не отображалось как http://localhost/test/sample.jpg непосредственно в адресной строке.

Примечание. Я обнаружил, что приведенные ниже решения работают при тестировании во всех браузерах, кроме Firefox.


person 夏期劇場    schedule 19.04.2012    source источник


Ответы (6)


Попробуйте следующее:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

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

Примечание. Возможно, что когда вы открываете какую-либо страницу с изображением, а затем копируете путь к этому изображению в адресную строку, вы можете увидеть это изображение, это происходит только из-за кеша браузера, на самом деле это изображение не был загружен с сервера (от Davo, полный комментарий ниже).

person Ruslan Osipov    schedule 19.04.2012

правило росипова прекрасно работает!

Я использую его на живых сайтах для отображения пустого или специального сообщения ;) вместо попытки прямого доступа к файлам я бы предпочел немного защитить от прямого просмотра. Я думаю, что это веселее, чем 403 Forbidden.

Итак, используя правило росипова, перенаправлять любой прямой запрос к файлам {gif,jpg,js,txt} на 'messageforcurious' :

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

Я рассматриваю это как вежливый способ запретить прямой доступ, скажем, к разумным файлам CMS, таким как xml, javascript... с учетом безопасности: для всех этих ботов, копающихся в Интернете в наши дни, интересно, что их алгоритм сделает из моего сообщения forcurious.

person tuk0z    schedule 27.03.2013

Судя по вашим комментариям, это то, что вам нужно:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

Я протестировал его на своем локальном хосте, и, похоже, он работает нормально.

person anubhava    schedule 19.04.2012

Прежде всего, найдите, где находится основной файл конфигурации apache httpd.conf. Если вы используете Debian, он должен быть здесь: /etc/apache/httpd.conf. Используя какой-нибудь файловый редактор, такой как Vim или Nano, откройте этот файл и найдите строку, которая выглядит следующим образом:

Options Includes Indexes FollowSymLinks MultiViews

затем удалите индексы слов и сохраните файл. Строка должна выглядеть так:

Options Includes FollowSymLinks MultiViews

После этого перезапустите apache (например, /etc/init.d/apache restart в Debian). Вот и все!

person Kaushal    schedule 14.06.2012

Для меня это была единственная вещь, которая сработала, и сработала отлично:

RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@])@@https?://\1/.
RewriteRule .(gif|jpg|jpeg| png|tif|pdf|wav|wmv|wma|avi|mov|mp4|m4v|mp3|zip?)$ - [F]

нашел его по адресу: https://simplefilelist.com/how-can-i-prevent-direct-url-access-to-my-files-from-outside-my-website/

person TheSteven    schedule 06.10.2020

Когда я использовал его на своем веб-сервере, я могу переименовать только локальный хост, например:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]
person Newbie    schedule 10.06.2019