Предотвращение загрузки всего сайта?

Есть один IP (из Китая), который пытается загрузить весь мой сайт. Он скачивает все мои страницы и сильно нагружает сервер (у меня более 500 000 страниц). Глядя на журналы доступа, я могу сказать, что это определенно не бот Google или какой-либо другой поисковый бот.

Временно забанил (по правилам iptables), но для меня это не выход, потому что у некоторых моих реальных пользователей такой же IP, поэтому они тоже забанены и не могут зайти на сайт.

Есть ли способ предотвратить такую ​​«активность пользователя»? Может быть, механизм, который реализует капчу, если вы пытаетесь запросить более 5 запросов в секунду или что-то в этом роде?

P.S. Я использую фреймворк Yii (PHP).

Любые предложения приветствуются.

спасибо!


person Mensch    schedule 30.08.2010    source источник


Ответы (2)


Вы сами ответили на свой вопрос!

Сделайте так, чтобы captcha появлялось, если запрос превышает определенное число в секунду или в минуту!

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

person pavanlimo    schedule 30.08.2010
comment
Я имел в виду, как мне это реализовать? :D Пользовательские сессии? - person Mensch; 30.08.2010

Я предполагаю, что лучший способ отслеживать подозрительную активность пользователя - это сеанс пользователя, CWebUser getState()/setState(). Сохраняйте текущее время запроса в сеансе пользователя, сравнивайте его с несколькими предыдущими значениями, покажите капчу, если пользователь делает запросы слишком часто.

Создайте новый компонент, предварительно загрузите его через функцию CWebApplication::$preload и проверьте активность пользователя в компонентах init(). Таким образом, вы сможете легко включать и выключать проверку ботов.

person Grey Teardrop    schedule 31.08.2010