Skip to content


Запрет использования нашего редиректора левыми сайтами

В большинстве популярных CMS из SEO-соображений (или для логирования переходов с сайта на другие сайты) имеется специальный скрипт-перенаправлялка, с помощью которого публикуемые в user-generated-content внешние ссылки автоматом преобразуется во внутренние. Работает такой скрипт просто – заставляет веб-сервер вернуть ответ с HTTP-статусом 30x (301, 302 или 303) и с передачей броузеру URL-а для перехода в HTTP-заголовке "Location:". На моем сайте такой скрипт живет по адресу "/go/".

Недавно на мой apache httpd стали приходить многочисленные зловредные запросы вот такого примерно вида (access-лог пишется в формате combined):

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://davischiropracticinc.com/rd/?dku=http://redirect.rankey.com/redirect.html?site_url=avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://shop.monard.se/redirector.php?url=http://www.lugnet.com/jump.cgi?http://avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

87.104.60.5 - - [06/May/2015:13:29:54 +0300] "GET /go/url=http://www.salmon.ro/christina/archives/000021.html HTTP/1.1" 303 - "http://www.guchol.net/redirect.php?url=http://www.christiancinema.com/catalog/redirect.php?action=url&goto=avz.org.ua/go/url=http://www.salmon.ro/christina/archives/000021.html" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16"

Так как такие запросы обычно приходят большими пачками, то в это время load average резко растет, сервер начинает ощутимо тормозить и посетители моего сайта не могут нормально им пользоваться. Очевидно, что какая-то редиска использует нас в каких-то своих гнусных целях. Это, конечно же, нужно пресечь. Сделать это можно с помощью следующих директив модуля mod_rewrite (для случая, если наш защищаемый сайт имеет домен avz.org.ua):

  1. RewriteCond %{HTTP_REFERER} !^http://(www\.)?avz\.org\.ua/.*
  2. RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.com.*
  3. RewriteCond %{HTTP_REFERER} !^$
  4. RewriteRule go/url=.* - [F]

Это означает, что если обращение к нашему редиректору происходит не с нашего сайта И не с гугловой выдачи И с не пустым HTTP-заговком Referer, то такие обращения блокируются, выдавая HTTP status code 403 (Forbidden) вместо кода 30x. Выдать 403 сразу на уровне апача намного быстрее, чем передавать запрос на обработку интерпретатору PHP.

Размещено в категории Веб-приложения. Теги: , .

Комментариев: 1

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

  1. Тоже юзал такой вариант

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11