Цитата мудреца

Голосование

Какими из перечисленных способов Вы готовы оплачивать покупки в интернет-магазинах?
 
Система Orphus. Если вы заметили ошибку на сайте, нажмите сюда.
Загружается, подождите...
Начало сайта Материалы сайта Программы PHP-скрипты
Версия для слабовидящих
Версия для печати

Ограничение на скорость выдачи страниц одному пользователю

Здесь представлены некоторые мои разработки на PHP. Это в, основном, служебные скрипты, которые работают в составе других скриптов и не могут быть протестированы здесь непосредственно.

Re: Ограничение на скорость выдачи страниц одному пользователю

Пару слов о диапазонах поисковиков.
Добавил себе следующие:
Begun Robot Crawler - (91.192.148.0/23)
Yahoo - 67.195.0.0 - 67.195.255.255 (67.195.0.0/16)

Еще есть такой робот twiceler (http://www.cuill.com/twiceler/robot.html)
Вот только такой вариант не работает почему-то:
Cuil - 216.129.119.10 - 216.129.119.49 (216.129.119.10/26)
38.99.44.101 - 38.99.44.111 (38.99.44.101/28)
67.218.116.130 - 67.218.116.134 (67.218.116.130/29)
Сейчас расширил диапазон и тестирую такой вариант:
Cuil - 216.129.119.0 - 216.129.119.49 (216.129.119.0/26)
38.99.44.0 - 38.99.44.111 (38.99.44.0/25)
67.218.116.0 - 67.218.116.134 (67.218.116.0/24)
Не знаю, в чем загвоздка?

Кстати, очень удобный сервис по определению масок к диапапзонам - Free Online IP Subnet Calculator (http://www.hackzone.ru/tools/netcalc/index.php). И не нужно считать единички с ноликами... :D
Ответить


Mike писал(а):Begun Robot Crawler - (91.192.148.0/23)

Это если Вы с Бегуном работаете...
Mike писал(а):Yahoo - 67.195.0.0 - 67.195.255.255 (67.195.0.0/16)

А этот есть в скрипте. Посмотрите внимательно.
Mike писал(а):Вот только такой вариант не работает почему-то:

А что именно не работает?
Mike писал(а):Кстати, очень удобный сервис по определению масок к диапапзонам - Free Online IP Subnet Calculator . И не нужно считать единички с ноликами

Имейте в виду, что посчитаете единицы и нолики Вы один раз, а калькулятор будет запускаться каждый раз, при открытии страницы. И подумайте, если к Вам будут заходить по несколько раз в секунду, то зачем Вам так нагружать сервер?
Я в своё время отказался от анализа текстового файла и перешёл на имена файлов только потому, что Юникс с каталогами работает быстрее, чем с одним файлом.

Добавлено спустя 15 минут 15 секунд:
Mike писал(а):Успешно использую Ваш скрипт и несколько его модифицировал

А какую цель преследовали?

Mike писал(а):$banIp = $realIp; // Используется для блокирования реального IP адреса через .htaccess.

Обычно, HTTP_X_FORWARDED_FOR совпадает с REMOTE_ADDR. Но в тех случаях, когда они не совпадают (а первый может содержать строку из нескольких адресов, указанных через запятую, то банить первый смысла вообще нет, потому что не его видит сервер, когда проверяет доступ, а REMOTE_ADDR.

Mike писал(а):1. Почему бы не использовать проверку возможного использования качальщиком прокси-сервера?

Как я уже написал, его банить бесполезно.

Mike писал(а):3. Этот кусок кода я сразу закомментировал и не видел его работу.

Дело Ваше. Но мне очень помогает. Я сразу вижу, что кого-то забанили, смотрю, где лазил, что делал. Проверяю, не робот ли.
Вот что он присылает:
Код: Выделить всё
Заблокирован адрес 92.101.19.113 (ppp92-101-19-113.pppoe.avangarddsl.ru)

ppp92-101-19-113.pppoe.avangarddsl.ru - - [20/Aug/2009:03:21:07 +0400] "GET http://pritchi.ru/" 200 46195 "http://www.google.com/search?client=opera&rls=ru&q=%D0%BF%D1%80%D0%B8%D1%82%D1%87%D0%B8&sourceid=opera&ie=utf-8&oe=utf-8" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"
ppp92-101-19-113.pppoe.avangarddsl.ru - - [20/Aug/2009:03:21:07 +0400] "GET http://pritchi.ru/base.css" 200 8601 "http://pritchi.ru/" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"
ppp92-101-19-113.pppoe.avangarddsl.ru - - [20/Aug/2009:03:21:07 +0400] "GET http://pritchi.ru/favicon.ico" 200 318 "http://pritchi.ru/" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"
ppp92-101-19-113.pppoe.avangarddsl.ru - - [20/Aug/2009:03:21:07 +0400] "GET http://pritchi.ru/img/tape_gr.gif" 200 271 "http://pritchi.ru/" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"
ppp92-101-19-113.pppoe.avangarddsl.ru - - [20/Aug/2009:03:21:07 +0400] "GET http://pritchi.ru/orphus/orphus.js" 200 10335 "http://pritchi.ru/" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00"


Mike писал(а):Я так понимаю нам в сообщении приходит информация из лога апача. Но что там особенно полезного? Мне кажется, что на эту обработку уходит приличное количество процессорного времени. Логи могут достигать десятки мегабайт. Или я не прав?

Полезное в том, что видно, что человек делал, куда ходил, как себя вёл. Время на это тратится всего один раз, при окончательном бане.
Ответить


Re: Ограничение на скорость выдачи страниц одному пользователю

Здравствуйте, Андрей.
Очень интересная и актуальная программа!

Списки диапазонов IP конечно выход (опять же быстро!), но здесь главный минус - постоянно контролировать изменения/дополнения адресов. Можно "связаться" с какой-нибудь партнёркой и забыть пополнить список...

Вопрос: а нельзя было бы к этому готовому списку "прикрутить" автоматическое обновление, скажем, для однозначных случаев идентификации робота того же Яндекса или Google (ввиду их значимости для сайта)?

Пример из статистики:
IP робота - 95.108.128.242
применив gethostbyaddr($_SERVER['REMOTE_ADDR']) получим:
хост- spider72.yandex.ru

Подделать хост, как я понимаю сложно, поэтому делаем однозначный вывод (по названию) - это робот Яндекса.
Далее, смотрим, есть ли этот IP в списках диапазонов, если нет - дополняем список.

По моей статистики хосты Яндекса или Google определяются нормально, а если что и не определится, то что-то лучше, чем ничего...

А Вы как думаете?... :)
Ответить


Есть один большой минус.
Любая такая проверка замедлит работу скрипта. При чём существенно. Представьте, что при каждом его вызове должна будет вызываться сетевая функция, которая выполняется далеко не сотую долю секунды. А здесь счёт идёт именно на них.
Можно было бы, конечно, каким-то образом отдельным процессом, запускаемым кроном, проверять хосты. Но тогда нужно передавать этому процессу список на проверку. Думаю, это тоже тяжеловато будет.
Решение:
Во-первых, Яндекс и Гугл очень хорошо настраиваются через robots.txt. Там у меня стоит такая строка:
Код: Выделить всё
User-Agent: *
Crawl-delay: 3

И никто из них не обращается к сайту чаще, чем раз в 3 секунды.
Во-вторых, я получаю письма от скрипта, в которых он сообщает о забаненных айпишниках. Я эти письма просматриваю. Случается это не сильно часто. Может 3-5 писем в день. Если вижу кого-то важного, то разбаниваю его и заношу его диапазон в исключения.

Пока проблем не было.
Ответить


Спасибо за оперативный ответ! Звучит вполне убедительно... :)
Ответить


робот Sape

Здравствуйте.
Подскажите, пожалуйста, как записать робота Sape в список исключений (188.72.80.205 и 188.72.80.201). Перевод в двоичный, десятичный вид для меня, увы, тёмный лес. Может его можно опросто записать в файл .htaccess? И как быть со своим адресом - его надо записать в скрипт или .htaccess?
Ответить


Помогите, пожалуйста

Здравствуйте, ещё раз.
Сайт был под DDoS атакой, только оклемался. Поставил Ваш скрипт и в логах Error вижу записи, например,

[Sun Apr 25 18:19:15 2010] [error] [client 80.251.113.56] File does not exist: /storage/home/bushman/public_html/attestation/function.fopen, referer: http://www.spruce.ru/attestation/attestation.html

[Sun Apr 25 18:19:24 2010]
[error] [client 80.251.113.56] PHP Warning: fopen(/storage/home/bushman/public_html/zoo/a80.251.113.56_1) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in /storage/home/bushman/public_html/zoo/antiddos.php on line 142, referer: http://www.spruce.ru/error404.html

[Sun Apr 25 18:19:24 2010] [error] [client 80.251.113.56] PHP Warning: fclose(): supplied argument is not a valid stream resource in /storage/home/bushman/public_html/zoo/antiddos.php on line 143, referer: http://www.spruce.ru/error404.html

На строчке 142 значится: $counter, 'w');
На строчке 143 значится: fclose($f);

Подскажите, пожалуйста, какой косяк я допустил?
Ответить


Dim писал(а):Подскажите, пожалуйста, как записать робота Sape в список исключений (188.72.80.205 и 188.72.80.201).

В переменную $ad_Robots_IP добавляете 2 строчки:
Код: Выделить всё
   'Sape1'      => array(
      sprintf('%c%c%c%c', 188, 72, 80, 205),
      sprintf('%c%c%c%c', 255, 255, 255, 255)
   ),
   'Sape2'   => array(
      sprintf('%c%c%c%c', 188, 72, 80, 201),
      sprintf('%c%c%c%c', 255, 255, 255, 255)
   ),

Поскольку Вы добавляете два конкретных адреса в исключение, то диапазон указывать не надо.

Dim писал(а):Может его можно опросто записать в файл .htaccess?

Зечем? В htaccess имеет смысл записывать тех, кого Вы хотите блокировать.

Dim писал(а):И как быть со своим адресом - его надо записать в скрипт или .htaccess?

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

Добавлено спустя 9 минут 6 секунд:
Dim писал(а):Подскажите, пожалуйста, какой косяк я допустил?

Прежде всего, посмотрите, правильно ли Вы определили константу AD_DIRNAME. Существует ли такая папка, стоят ли на ней права, позволяющие писать в неё.
Кроме того, проверьте строчку 141. Именно в ней идёт обращение к файлу. Строка 142 - это её завершение. И отладчик её показывает, потому что в ней стоит точка с запятой. А ошибка, скорей всего происходит в 141 строке.
Ответить


Добрый вечер.
Андрей, спасибо Вам за ответы. Нашёл свой косяк - неправильно прописал путь к папке logs. А в папке (константа AD_DIRNAME) появляется файлик а+ip клиента. То есть скрип работает... Спасибо! Думаю, Ваш скрипт поможет мне снизить нагрузку на сайт!
Ответить


А..Я писал(а):
Marinera писал(а):Скажите пожалуйста, а где прописывать этот скрипт в форуме phpBB ?

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

Первое это конечно благодарность Вам Андрей за понимание ситуации и поддержку! Не все конечно являются продвинутыми юзерами - и как хорошо что есть такие как Вы, быстро и по человечески поясняете! Скопировал Ваш спасательный круг по ограничению на скорость выдачи... Правда вновь растерялся по index.php.... У меня сайт работает на трёх шаблонах и у каждого свой индекс. Но если я понял правильно я его должен поставить в корневую часть в самом начале?... Но и тут наткнулся на всяко разно - у меня index1.php присутствует тоже. Дело в том, что сам сайт ставил один знакомый дизайнер, а так сказать все что касается движка и т.д. - другой - в итоге дизайнер переехал в Таганрог, а концов по вебмастеру так и не нашёл... Вот и приходится потихоньку из чайника набираясь опыта продвигаюсь медленно! И первое это конечно пожелание: желательно бы более расширено эту тему раскрыть, поскольку многие форумы забиты информацией в рамках Вопрос-Ответ, но при этом потратив часа 3 находишь верный вариант иль необходимые действия. И невсегда иной раз попадаешь на добросовестных челов, которые помочь стремятся, а наоборот проблем порой бывает много (со всякими ифреймами).
Второе. Благодаря вики PeterHost и Вашему сайту столкнувшись с этой проблемой стал более пристально смотреть и сравнивать. Конечное первое, это я сначала был несколько в сомнениях - и роботы (в пределах индексации сайта) и посетители - это конечно позитивный момент по структуре раскрутки сайта (у вас к сожалению не описано в самом начале этот разделительный момент). Затем, (быть может это кому-то будет тоже важно для сравнения) - у меня стоит к моему расширению дополнительный компонент, который показывает в админке и ботов и посетителей откуда, и на какой странице был... Сравнив данные в БД и в админке этот компонент - пришёл к выводу, что Яндекс роботы действительно различных типов есть, в том числе и те кто высвечиваются как из Норвегии, но Whois - показывает принадлежность к Яндексу, ну и не говоря о других. Поэтому у меня вот такой вопрос ко всему прочему - если к примеру банить по этому доп. расширению к движку (а IP адреса редко повторяются) а в БД вижу что за 1 сек до 7-8 вызовов сразу поможет ли это тоже, как и ваш? Что-то много написал, но очень хочется быстро разобраться с этой проблемой... Уж больно не приятно когда что-то не ладится.
Ответить


Пред.След.

Вернуться в PHP-скрипты



Кто сейчас на сайте

Зарегистрированные пользователи: Yahoo [Bot], Yandex [bot]