Простой скрипт блокировки скачивания всего сайта
Материал из 1GbWiki.
Скрипт написан для решения проблем клиентов хостинг-провайдера www.1Gb.ru связанных с нагрузкой на сервер в результате попыток скачать сайт полностью программой скачивания сайта. Архив со скриптом можно взять по ссылке http://dmach.ru/prog/wgetblock/wgetblock.rar.
Содержание |
[править] Теория
В страницу сайта вы размещаете скрытую ссылку таким образом, что "живой" человек никогда не неё не кликнет. Программа скачивания сайта не знает о такой хитрости и обходит все ссылке в коде сайта даже если они оформлены таким образом, что визуально на странице не видны. Когда программа которая обходит ваш сайт попадает на такой скрытый скрипт то скрипт точно знает, что источник запроса можно блокировать - он создаёт инструкцию по блокировке и помещает её в скрипт который прописан для всех страниц сайта записывая туда ip-адрес источника атаки. Далее при обработке последующих запросов программа доходит только до кода блокировщика, который прекращает выполнение запроса по признаку соответствия ip-адреса источника и своей базы с "плохими" адресами.
Недостатки:
- Если человек который пытается скачать ваш сайт знает об этой защите - ему не составит труда её обойти указав в настройке программы игнорирование скрытого скрипта-уловителя.
- Если источник производит запросы к сайту с разных ip-адресов такая хитрость не будет эффективной.
- Текущая реализация работает только с PHP, если вы используете другие технологии, то оно вам не подойдёт. Однако, не составляет труда написать то же самое под это другое.
Некоторые достоинства:
- Скрипт очень простой, вы можете модифицировать его по своему желанию для ваших потребностей или использовать в неизменном виде.
- Скрипт может отсылать уведомления на почтовый адрес при блокировках.
[править] Инструкция по установке
Для установки нужно выполнить следующие действия:
- Подключить блокирующий модуль в скрипты сайта
- Создать скрытую ссылку на модуль уловитель.
Испытания скрипта были проведены для программ Teleport Pro и wget - обе программы были успешно блокированы.
[править] Подробное описание
[править] Блокировщик (по умолчанию - block.php)
Код вызова блокирующего скрипта должен быть вписан в скрипт php который подключается для всех обращений к сайту или к требуемой группе скриптов.
Например, вы можете разместить его в файле index.php, если все обращения на сайт идут через него или в файл config.php если он подключается для всех скриптов сайта.
Пример подключения блокирующего модуля:
<?php include '/home/virtwww/w_site_715a5517/http/block.php'; ?>
[править] Уловитель (по умолчанию - catch.php)
Уловитель вам нужно разместить таким образом, что бы живой человек не мог попасть на скрипт с ним, это можно сделать, к примеру, пустой ссылкой:
<a href='catch.php'></a>
Что бы обойти вариант, когда человек инициирует повторную скачку сайта постарайтесь видоизменять ссылку каждый раз при обращении к странице, например дописывая какой-нибудь параметр средствами того же php:
<?php print "<a href='catch.php?p=".rand(1, 100)."'></a>"; ?>
Если ожидать от программы скачивания сайта повышенного интеллекта - что она не будет открывать пустые ссылки (вдруг кто такое напишет), можно усложнить ссылку скрыв её при помощи CSS а не пустого тела. Например, так:
<?php print "<a href='catch.php?p=".rand(1, 100)."' style='visibility: hidden;'>My photo</a>"; ?>
Можно использовать так же любые другие методы что бы скрыть ссылку на
уловитель, например размещать кликабельный элемент очень маленького размера
в неожиданном месте и тому подобное.
Скрипт-уловитель конфигурируется путём задания нужных параметров в теле скрипта. Единственный обязательный параметр - $blockScriptPath, полный физический путь к скрипту-блокировщику.
[править] Меры предосторожности
Так как есть вероятность, что на данный скрипт попадёт какая либо поисковая система (например Яндекс) и тем самым будет блокирована - нужно принять меры предосторожности против этого. В качестве одной из мер - размещение файла robots.txt запрещающего индексировать скрипт-уловитель. Пример инструкций файла robots.txt ниже:
User-agent: * Disallow: /catch.php
Если же поисковая система проигнорирует директивы файла robots.txt и попадётся в скрипт-уловитель. Чтож, сама виновата. В любом случае, вы сможете получить уведомление на электронную почту и быстро снять блокировку.
[править] Дополнительные замечания
- Фишка скрипта в отсутствии базы данных где хранятся ip-адреса. Скрипт-уловитель напрямую сам пишет скрипт-блокировщик (вы так же можете редактировать его вручную). Это повышает эффективность решения.
- Вы можете свободно переименовывать файлы скриптов что бы придать им менее очевидные имена.
- Вы можете размещать несколько скриптов-уловителей в разных местах и по разному заданных усложняя ручной обход защиты.
- Если вы будете вручную редактировать скрипт-блокировщик - не дописывайте в него закрывающую конструкцию PHP - ?>, это приведёт к некорректной работе скрипта в целом.
[править] Обновления скрипта
- 08.08.2007 - Первая версия
- 12.08.2008 - В высылаемое на почту сообщение добавлена ифнормация о домене сайта
[править] Варианты для других технологий
Так же пользователями хостинга 1Gb.ru были написаны реализации скрипта для других скриптовых технологий:
- ASP.NET - http://netcode.ru/files/asp.net_block.zip, по вопросам работы этого варианта обращайтесь по ICQ 159585