Как защитить веб-сайт от массового выскабливания / загрузки?

У меня есть сервер LAMP, где я запускаю веб-сайт, который я хочу защитить от массового очищения / загрузки. Я знаю, что для этого нет идеального решения, что злоумышленник всегда найдет способ. Но я хотел бы иметь хотя бы некоторую «защиту», которая ожесточает способ кражи данных, чем просто ничего не имею.

На этом веб-сайте есть cca. 5000 подстраниц с ценными текстовыми данными и несколькими изображениями на каждой странице. Я хотел бы иметь возможность анализировать входящие HTTP-запросы в Интернете и, если есть подозрительная активность (например, десятки запросов за одну минуту от одного IP-адреса), он автоматически занесет этот определенный IP-адрес в список за другим доступом к сайту.

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

Благодарим вас за ответы на тему и возможные решения.

Извините, но я не знаю о каком-либо кодеке анти-лишения, доступном готово, что делает хорошую работу.

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

Вы уже упоминали о скорости запросов, но помните, что все чаще пользователи будут подключаться к сетям NAT, например, к IPV6. Лучше всего проверять каждую сессию – вам не нужно требовать от ваших пользователей регистрации и входа в систему (хотя openId делает это намного проще), но вы можете перенаправить их в определенную начальную точку, когда они делают запрос без текущей сессии и запишите их без имени пользователя / пароля. Хорошая идея – проверить референт (и что референт действительно указывает на текущий элемент контента). Отслеживание 404 ставок. Дорожные блоки (когда оценка превышает пороговое значение переадресации на capcha или требует входа в систему). Проверка пользовательского агента может указывать на атаки – но должна использоваться как часть механизма оценки, а не как критерий да / нет для блокировки.

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

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

Хотя это довольно старый пост, я думаю, что ответ не совсем завершен, и я подумал, что стоит добавить мои два цента. Во-первых, я согласен с @symcbean, стараюсь избегать использования IP-адресов, но вместо этого использую сеанс, cookie или другой метод для отслеживания отдельных пользователей. В противном случае вы рискуете объединить группы пользователей, совместно использующих IP-адрес. Наиболее распространенным методом ограничения скорости, который по сути является то, что вы описываете «десятки запросов за одну минуту от одного IP», используется алгоритм негерметичного ковша .

Другие способы борьбы с скребками:

  • CAPTCHAs
  • Сделайте свой код трудным для интерпретации и часто меняйте его. Это затрудняет выполнение скриптов.
  • Загрузите списки IP известных спамеров, прокси-серверов, узлов выхода TOR и т. Д. Это будет длинный список, но его отличное место для начала. Вы можете также заблокировать все IP-адреса amazon EC2.

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

Проверка ссылок – это очень простой метод, который хорошо работает с автоматическими атаками. Вы обычно обслуживаете контент, если реферер является вашим собственным доменом (то есть пользователь достиг страницы, щелкнув ссылку на вашем собственном сайте), но если реферер не установлен, вы можете обслуживать альтернативный контент (например, 404 не найден) ,

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

Также это означает, что любые глубокие ссылки на ваш сайт не будут работать – но, возможно, вы этого хотите?

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

Что-то, что я использовал на некоторых моих сайтах, – это блокирование известных User-Agents загрузчиков или архиваторов. Вы можете найти их здесь: http://www.user-agents.org/ (к сожалению, нелегко сортировать по типу: D). В настройке хоста я перечисляю те, которые мне не нужны с чем-то вроде этого:

 SetEnvIf User-Agent ^Wget/[0-9\.]* downloader 

Тогда я могу сделать Deny from env=downloader в соответствующем месте. Конечно, изменение пользовательских агентов не сложно, но, по крайней мере, это немного сдерживающий фактор, если просмотр моих журналов – это любое указание.

Если вы хотите фильтровать запросы в минуту или что-то в этом роде, я не думаю, что есть способ сделать это в apache. У меня была аналогичная проблема с ssh и saslauth, поэтому я написал сценарий для наблюдения за файлами журнала, и если в течение определенного количества времени было выполнено определенное количество неудачных попыток входа в систему, оно добавило правило iptables, которое блокировало доступ этого IP-адреса эти порты.

Если вы не против использования API, вы можете попробовать наш https://ip-api.io

Он объединяет несколько баз данных известных IP-адресов прокси, узлов TOR и спамеров.

Я бы посоветовал одну из двух вещей,

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

Во-вторых, попробуйте скопировать google, если вы очистите результаты google ALOT (и я имею в виду несколько сотен раз в секунду), тогда он заметит это и заставит вас Captcha.

Я бы сказал, что если сайт посещают 10 раз в секунду, это, вероятно, бот. Так что дайте ему Captcha, чтобы быть уверенным.

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

Вы можете использовать счетчик (DB или сеанс) и перенаправить страницу, если предел срабатывает.

 /**Pseudocode*/ if( ip == currIp and sess = currSess) Counter++; if ( Count > Limit ) header->newLocation; 

Я думаю, что динамическая блокировка IP-адресов, использующих блокиратор IP, поможет лучше.