Назад | Перейти на главную страницу

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

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

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

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

Вот чего я до сих пор добился:

<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 ...).

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

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

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

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

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

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

И еще одна идея проста: просто перенаправить в файл 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

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

Защита от хотлинков

Автоматически включайте защиту от хотлинков для ваших изображений, чтобы предотвратить ссылки за пределами сайта. Рефералам, которые не находятся в зоне и не пусты, будет отказано в доступе. Поддерживаемые расширения файлов: gif, ico, jpg, jpeg и png.

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

Вопрос 1:

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

вопрос 2:

да

вопрос 3

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

Или используйте CoralCDN муравей разрешил народным ссылаться на их душе?