Как предотвратить горячие ссылки ("кража изображений" / "кража пропускной способности") ресурсов на моем сайте?
Я пытаюсь написать "окончательный" анти горячие ссылки.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>
Мои вопросы:
- Как избежать жесткого кода
mydomain.com
в.htaccess? (Было бы здорово иметь возможность развернуть этот.htaccess на всех моих доменах без необходимости изменять его для каждого из них.) - В моем RewriteRule,
gif|jpe?g|png|zipx?
эквивалентноgif|jpg|jpeg|png|zip|zipx
право? (Извините, еще новичок в регулярных выражениях.) - Видите ли вы что-нибудь плохое в моем.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 муравей, чтобы народная горячая ссылка на содержание их сердца?