Как предотвратить динамическое хотлинкинг (без жесткого кодирования домена хоста) с использованием .htaccess HTTP_HOST и HTTP_REFERER

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

Мне это нужно, поскольку программное обеспечение будет использоваться для нескольких доменов и может использоваться в качестве установки. Было бы невозможно поручить каждому пользователю внести изменения в файл htaccess, чтобы войти в свой текущий домен.

Я сталкивался с большим количеством кода, подобного этому. но здесь, как вы видите, вам нужно ввести доменное имя.

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.example.com [NC]
RewriteRule \.(gif|jpg|png)$ - [F,NC]

Я также наткнулся на приведенный ниже фрагмент с этой страницы Apache, которая кажется решить проблему. Но по какой-то причине не могу заставить его работать.

RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteRule ^/images - [F]

Примечание. Я настроил локальное доменное имя для выполнения тестов. поэтому я получаю доступ к своему сайту как mysite.local вместо localhost/mysite

Есть ли способ предотвратить хотлинкинг без жесткого кодирования доменного имени в htaccess?


person TheWebGuy    schedule 25.03.2012    source источник
comment
Только что понял, что приведенный выше код со страницы apache предназначен для apache версии 2.4. в то время как у меня есть версия 2.2 на моем локальном компьютере.   -  person TheWebGuy    schedule 25.03.2012
comment
Быстрое уточнение относительно вашего первого параметра: вы говорите, что изображения должны быть доступны для некоторых доменов, но не для всех (с вашим сервером, выступающим в качестве сервера изображений для этих доменов из белого списка) или что весь сайт будет переносимым, изображения и все , и вы хотите избежать хотлинкинга независимо от того, где установлен сайт?   -  person Anthony    schedule 25.03.2012
comment
Ну рассмотрим сайт как инсталляцию. которые будут использоваться разными клиентами для разных целей. помимо нескольких социальных сайтов, таких как facebook, google и, конечно же, домена, на котором он установлен, изображения и другие ресурсы должны быть защищены от хотлинкинга. для любых других сайтов.   -  person TheWebGuy    schedule 25.03.2012


Ответы (1)


Глядя на документацию 2.2, я думаю, что тогда она была намного проще, чем в 2.4. Но проверьте, чтобы быть уверенным:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !%{HTTP_HOST} [NC]
RewriteRule ^/images - [F]
person Anthony    schedule 25.03.2012
comment
Извините, там была ошибка копирования и вставки. Все еще проверяю, чтобы подтвердить необходимость косой черты спереди и сзади. - person Anthony; 25.03.2012
comment
Я не понимаю, почему приведенное выше не должно работать, поскольку %{HTTP_HOST} должно разрешаться в www.example.com (в их примере). - person Anthony; 25.03.2012
comment
насколько я знаю, нельзя использовать серверные переменные в обоих аргументах rewritecond. - person undone; 25.03.2012
comment
Я пробовал эту технику, но она не сработала. Также что происходит, когда URL-адрес вводится как site.com и site.com как с этим справиться?. Обратите внимание, что я также добавил правило перезаписи для выполнения перенаправления 301 для удаления www из домена. - person TheWebGuy; 25.03.2012