Как предотвратить горячие ссылки ("кража изображений" / "кража пропускной способности") ресурсов на моем сайте?

Я пытаюсь написать "окончательный" анти горячие ссылки.htaccess...

Вы можете найти много примеров / учебных пособий/ генераторов в сети, но многие из них неправильные или неполные (или даже оба).

Это функции, которые я ищу:

  • Должен блокировать горячие ссылки для списка расширений файлов, когда HTTP_REFERER является сторонним сайтом.
  • Необходимо разрешить горячие ссылки для текущего домена (duh), не кодируя его в.htaccess.
    • Для текущего домена он должен работать под http и https.
    • Для текущего домена он должен работать с www и без www.
  • Должен быть в состоянии добавить домены исключений к этим правилам (как наш друг Google), и эти домены должны работать с http и https, а также с www или без www.

Это то, чего я достиг до сих пор:

<IfModule mod_rewrite.c>

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]

</IfModule>

Мои вопросы:

  1. Как избежать жесткого кода mydomain.com в.htaccess? (Было бы здорово иметь возможность развернуть этот.htaccess на всех моих доменах без необходимости изменять его для каждого из них.)
  2. В моем RewriteRule, gif|jpe?g|png|zipx? эквивалентно gif|jpg|jpeg|png|zip|zipx право? (Извините, еще новичок в регулярных выражениях.)
  3. Видите ли вы что-нибудь плохое в моем.htaccess, о котором я не знаю?

Для #1 я знаю, что это несколько возможно. Самый близкий я нашел этот фрагмент, который удаляет www из URL без жесткого кодирования домена. Есть ли способ использовать этот метод для моего вопроса № 1?

RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

Обновить:

Мне известны решения, которые будут служить изображением с водяным знаком вместо обычного. Но я не ищу такого решения. Я хочу универсальное решение (обслужить 403 ошибки), которое будет работать для всех видов бинарных файлов (zip, exe, iso, jpg, png, gif...).

5 ответов

Решение

Независимо от того, что вы делаете, вы будете "тратить" циклы ЦП (чтобы определить, авторизован ли сайт-реферер (тот, который выполняет связывание) или нет, вы должны выполнить некоторую обработку данных запроса).
Единственное, что вы можете сделать, это сохранить пропускную способность, тратя при этом минимум циклов ЦП.

В Apache Docs есть несколько примеров, которые делают именно то, что вы хотите. Вот этот:

SetEnvIf Referer example\.com localreferer
<FilesMatch \.(jpg|png|gif)$>
Order deny,allow
Deny from all
Allow from env=localreferer
</FilesMatch>

кажется наиболее применимым (и не требует полного веса mod_rewrite).
Вы можете добавить дополнительные действительные источники с дополнительными SetEnvIf а также Allow директивы.

Как насчет написания правила, что, если referer неизвестен (запрещен), просто вызовите файл Php, в котором вы передаете изображение в качестве параметра, а в файле Php просто вставьте большой красный: "этот файл взят из MYWEBSITE.COM и не имеет официального разрешения для показа здесь ".

Что касается вашего вопроса, сделайте ваше правило глобальным. Поправьте меня, если я ошибаюсь, но если правило объявлено перед любым vhost, оно будет применено ко всем vhost (своего рода "правило по умолчанию").

И другая идея проста: просто перенаправить в файл Php (здесь filter.php) который заглянет на авторизованный сайт и вернет нужный файл, если все в порядке:

RewriteRule /(.*)\.jpg$ /filter.php?im=$2\.jpg [QSA,L]

В filter.php просто динамически загружайте список vhost или что-то в этом роде:

if (isset($_SERVER['HTTP_HOST'])) {
   if ((mb_ereg('thereferers\.I\.HATE\.com',HOST) !== false) ) {
       ... your code ...
   }
}

Cloudflare может вам помочь: http://www.cloudflare.com/

Это, однако, работает только для изображений, но это то, что вам нужно.

Защита Hotlink

Автоматически включите горячую ссылку для ваших изображений, чтобы предотвратить ссылки за пределы сайта. Реферерам, которые не находятся в зоне и не являются пустыми, будет отказано в доступе. Поддерживаемые расширения файлов: GIF, ICO, JPG, JPEG и PNG.

Защищено: http://mydomain.com/images/pic.jpg Чтобы обойти: http://mydomain.com/images/hotlink-ok/pic.jpg

Вопрос 1:

RewriteEngine на
RewriteCond%{HTTP_REFERER}!^http://(.+)?yoursite.com/ [NC]
RewriteCond%{HTTP_REFERER}!^$
RewriteRule. *. (Jpe? G |gif|bmp|png)$ - [F]

вопрос 2:

да

вопрос 3

Я бы использовал свой

Или использовать CoralCDN муравей, чтобы народная горячая ссылка на содержание их сердца?

Другие вопросы по тегам