Apache. Документация на русском


Разделы:   1    2    3      4      5    6    7    8    9    10    11    12    13    14    15    16  

Раздел 4. Руководство по перезаписи URL

Пункты:   35    36      37      38    39    40    41    42    43    44  

 <         > 
  RU            EN  

Пункт 37. Использование mod_rewrite для управления доступом

Этот документ дополняет mod_rewrite справочную документацию. В нем описывается, как вы можете использовать mod_rewrite для управления доступом к различным ресурсам, и другие связанные с этим методы. Это включает в себя множество примеров общего использования mod_rewrite, включая подробное описание того, как каждый из них работает.

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

Запрещение «хотлинкинга» изображения

Описание:

Следующий метод запрещает другим сайтам размещать ваши изображения на своих страницах. Эту практику часто называют «хотлинкингом», и она приводит к тому, что ваша пропускная способность используется для предоставления контента для чужого сайта.

Решение:

Этот метод основан на значении переменной HTTP_REFERER , которая не является обязательной. Таким образом, некоторые люди могут обойти это ограничение. Однако большинство пользователей столкнется с неудачным запросом, что со временем должно привести к удалению изображения с этого другого сайта.

Есть несколько способов справиться с этой ситуацией.

В этом первом примере мы просто отклоняем запрос, если он не был инициирован со страницы нашего сайта. Для целей этого примера мы предполагаем, что наш сайт www.example.com .

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

Во втором примере вместо отказа от запроса мы отображаем альтернативное изображение.

 RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "/images/go-away.png" [R,NC] 

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

 RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "http://other.example.com/image.gif" [R,NC] 

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

Обсуждение:

Если все, что вы хотите сделать, это запретить доступ к ресурсу, а не перенаправлять этот запрос в другое место, это можно сделать без использования mod_rewrite:

 SetEnvIf Referer "example\.com" локальный реферер
<FilesMatch "\.(jpg|png|gif)$">
 Требовать env localreferer
</FilesMatch> 

Блокировка роботов

Описание:

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

Стандарт исключения роботов определяет файл, /robots.txt в котором указаны те части вашего веб-сайта, где вы хотите исключить роботов. Однако некоторые роботы не соблюдают эти файлы.

Обратите внимание, что существуют методы достижения этого, которые не используют mod_rewrite. Также обратите внимание, что любой метод, основанный на USER_AGENT строке клиента, можно очень легко обойти, поскольку эту строку можно изменить.

Решение:

Мы используем набор правил, определяющий защищаемый каталог и клиент USER_AGENT , определяющий вредоносного или постоянного робота.

В этом примере мы блокируем робота, вызываемого NameOfBadRobot из местоположения /secret/files . Вы также можете указать диапазон IP-адресов, если вы пытаетесь заблокировать этот пользовательский агент только из определенного источника.

 RewriteCond "%{HTTP_USER_AGENT}" "^NameOfBadRobot"
RewriteCond "%{REMOTE_ADDR}" "=123\.45\.67\.[8-9]"
RewriteRule "^/secret/files/" "-" [F] 
Обсуждение:

Вместо того, чтобы использовать для этого mod_rewrite, вы можете добиться той же цели, используя альтернативные средства, как показано здесь:

 SetEnvIfNoCase User-Agent "^NameOfBadRobot" уходит
<Расположение "/секрет/файлы">
 <ТребоватьВсе>
 Требовать все предоставленные
 Не требовать env goaway
 </RequireAll>
</местоположение> 

Как отмечалось выше, эту технику легко обойти, просто изменив USER_AGENT заголовок запроса. Если вы столкнулись с продолжительной атакой, вам следует заблокировать ее на более высоком уровне, например, на брандмауэре.

Отказ хостов в черном списке

Описание:

Мы хотим вести черный список хостов, например hosts.deny , и заблокировать этим хостам доступ к нашему серверу.

Решение:
 RewriteEngine включен
RewriteMap hosts-deny "txt:/path/to/hosts.deny"
RewriteCond "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND" [ИЛИ]
RewriteCond "${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}" "!=NOT-FOUND"
Правило перезаписи "^" "-" [F] 

##
## hosts.deny
##
## ATTENTION! This is a map, not a list, even when we treat it as such.
## mod_rewrite parses it for key/value pairs, so at least a
## dummy value "-" must be present for each entry.
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

Обсуждение:

Второй RewriteCond предполагает, что у вас включен HostNameLookups, поэтому IP-адреса клиентов будут разрешены. Если это не так, вы должны удалить второй RewriteCond и снять флаг [OR] с первого RewriteCond.

Дефлектор на основе рефералов

Описание:

Перенаправление запросов на основе реферера, от которого пришел запрос, с разными целями для каждого реферера.

Решение:

В следующем наборе правил используется файл карты, чтобы связать каждого Referer с целью перенаправления.

 Дефлектор RewriteMap "txt:/path/to/deflector.map"
Переписать условие "%{HTTP_REFERER}" !=""
RewriteCond "${дефлектор:%{HTTP_REFERER}}" "=-"
RewriteRule "^" "%{HTTP_REFERER}" [R,L]
Переписать условие "%{HTTP_REFERER}" !=""
RewriteCond "${deflector:%{HTTP_REFERER}|NOT-FOUND}" "!=NOT-FOUND"
RewriteRule "^" "${deflector:%{HTTP_REFERER}}" [R,L] 

В файле карты перечислены цели перенаправления для каждого реферера, или, если мы просто хотим перенаправить обратно туда, откуда они пришли, на карту ставится «-»:

 ##
## дефлектор.карта
##
http://badguys.example.com/bad/index.html –
http://badguys.example.com/bad/index2.html –
http://badguys.example.com/bad/index3.html http://somewhere.example.com/ 


 <         > 

Пункты:   35    36      37      38    39    40    41    42    43    44  

Рейтинг@Mail.ru