Заголовок сообщения: защита от флуда Добавлено: 24 Январь 2002, 09:54:00
Точнее -- маленькие ее аспект: защита от флуда при постинге в форум (переношу продолжение разговора сюда из сайт-чека). Вот мои соображения:
Для начала определимся с тем, что же конкретно нам мешает. [img]images/smiles/icon_smile.gif[/img] Мешает нам, очевидно, чрезмерный поток сообщений, генерируемый обычно роботами (я не встречал людей, которые способны породить 1000 неидентичных писем с интервалом 20ms).
Понятно, что решение проблемы "в лоб" -- ограничить ропускную способность "постилки писем". [img]images/smiles/icon_smile.gif[/img] К примеру, если мы обеспечим паузу в 30сек. после каждого поста, то роботы умрут от тоски.
Люди, правда, тоже. Ибо кому понравится при посте постоянно получить сообщение "подождите, обрабатываю предыдущее сообщение" только потому, что кто-то другой только что разместил свое письмо. Такой форум, IMNSHO, обречен на быструю и безболезненную смерть.
Следовательно, наша первая цель -- научиться различать посетителей и сделать для каждого из них первональное ограничение на темп постинга.
Наиболее примитивное решение -- различать посетителей по IP. Он хорошо тем, что IP всегда есть. [img]images/smiles/icon_smile.gif[/img] Плохо же то, что в реальной жизни за одиним IP могут скрываться десятки|сотни пользователей, пришедших через прокси.
Таким образом, опознавание по IP можно считать ограниченно применимым. Т.е. мы можем его использовать при отказе других способов.
Одним из этих "других" видится регистрация пользователей и организация сессий. Я преднемеренно не говорю о куках, поскольку с тем же успехом это можно реализовать через URL rewriting.
Схема проста:
1. Требуем предварительной регистрации пользователя. 2. Разрешаем не более одной сессии для каждого пользователя. 3. Для каждой сессии организуем персональное ограниченние темпа постинга.
Применение этой схемы требует использования какого-либо механизма, ограничивающего автоматическую регистрацию роботами. Я преднамеренно говорю об ограничении, а не о запрещении, ибо интеллект роботов может быть весьма высок. [img]images/smiles/icon_smile.gif[/img]
Самый простой способ -- разделить регистрацию на две части: собственно заведение нового логина и подтверждение регистрации.
Первая часть очевидна, вторая же может быть реализована различными способами. Навскидку:
1. Пауза. После первичной регистрации отправляем на страницу с текстом правил. Внизу -- кнопка продолжения регистрации с напоминанием, что правила нужно прочесть. Контролируем время чтения: если пользователь нажал кнопку ранее, чем через 30сек -- возвращаем обратно. [img]images/smiles/icon_smile.gif[/img] 2. То же самое, но в тексте кроется фраза: "Кстати, пароль для продолжения регистрации таков: 34345345". А внизу вежливо просим ввести пароль. [img]images/smiles/icon_smile.gif[/img] 3. То же, но пароль дается не текстом, в картинкой. Картинка слегка замусоривается, чтобы осложнить жизнь роботов. 4. Правила и URL/код для продолжения регистрации высылаем на e-mail. Здесь сразу две пользы: доставка письма уже даст задержку, а либителям флуд-роботов придется озаботиться созданием уникальных e-mail'ов.
Заголовок сообщения: защита от флуда Добавлено: 24 Январь 2002, 13:20:00
Чот я не совсем понял. Можно ведь сначала зарегистрироваться, а потом робота натравить? Далее: почему нельзя сделать интервал для постов от одного пользователя по нику?
Заголовок сообщения: защита от флуда Добавлено: 24 Январь 2002, 14:10:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения GoBeer: <STRONG>Чот я не совсем понял. Можно ведь сначала зарегистрироваться, а потом робота натравить?</STRONG><HR></BLOCKQUOTE>
А смысл? Постить с интервалами в 30сек?
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR><STRONG> Далее: почему нельзя сделать интервал для постов от одного пользователя по нику?</STRONG><HR></BLOCKQUOTE>
Без регистрации? Бессмысленно. Робот может себе сколько угодно уникальных ников нагенерить. [img]images/smiles/icon_smile.gif[/img]
Заголовок сообщения: защита от флуда Добавлено: 24 Январь 2002, 19:43:00
Куки есть один из механизмов огранизации сессий. Второй общедоступный механизм -- URL rewriting. При этом id сессии перегоняется через URL. Способ, надо сказать, на редкость геморройный. [img]images/smiles/icon_smile.gif[/img]
Опять же можно организовать сессию через HTTPS, но лично я не умею. [img]images/smiles/icon_smile.gif[/img]
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 02:39:00
Ой, а можно я! Можно я скажу! Рыбьята, а не проще ли рядом с формой для сообщения выводить ту самую картинку с шумом, а рядом с ней - 5 (или более) radiobutton-ов, возле каждого написано произвольное слово, а возле одного из них - то слово которое на картинке. Перед тем как нажать сабмит, юзер должен выбрать правильное слово. При каждой загукзке страницы будет разная картинка и разные "фальшивые слова". Я думаю никто не умрет от *одного* дополнительного клика. А бот зае***ся угадывать.
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 10:12:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения -=SAS=-: <STRONG>Crazy В чем смысл ограничения регистрации?</STRONG><HR></BLOCKQUOTE>
Чтобы помешать роботам потоком регистрить себе новые ники и запускать для каждого ника индивидуальный поток постинга.
<STRONG>Нужно установить какой-либо буфер - например постить не более 6 сообщений в минуту в тему. Т.е. за минуту отправили 6 штук - седьмая не принимается (цифру шесть можно изменить на любую понравившуюся) - таким образом нету строгой паузы для всех пользователей, а для робота - самое то.</STRONG>
Для робота это -- мечта. [img]images/smiles/icon_smile.gif[/img] Посадив робота, который будет 6 раз в минуту постить муть мы гарантированно блокируем всю работу форума. DOS в чистом виде.
<STRONG>Вот если робот постит в разные топики, то тогда начинаются серьезные проблемы - есть "люди-роботы", которые, дабы сэкономить свое время в инте, открывают кучу тем, уходят в оффлайн, пишут туеву хучу ответов и потом за пару минут отправляют их. Что делать с такими "ботами" я незнаю - как отличить их от реальных роботов и есть самая сложная задача.</STRONG>
IMHO, для таких случаев стОит иметь управляемые администратором опцию в профиле пользователя: разрешение на постинг без временнЫх ограничений. Т.е. желающий получить эту фичу списывается с админом и просит включить.
<STRONG>Можно попробовать сделать такую вещь - сделать какую-либо незначительную задержку при отправке сообщения (sleep в несколько секунд), но это спасет если робот работает одним потоком</STRONG>
(мечтательно) Бывают и хорошие роботы. Это на аптеку я натравил простейшего одноклеточного. [img]images/smiles/icon_smile.gif[/img] Свой сайт, к примеру, я таки нашел способ завалить. Исходник никому не дам, адрес сайта тоже. [img]images/smiles/icon_smile.gif[/img]
<STRONG>Использовать уникальных сессий - не спасает. Это то же самое, что отключить к чертям правую кнопку мыши и кнопку shift - т.е. давать работать только в одном окне.</STRONG>
<STRONG>На одном форуме, я знаю, сделали ограничение на постинги - один пост за 30 секунд (для новичков и гостей) и один пост в 10 секунд (это уже для старых мемберов).</STRONG>
А вот это -- типичная ошибка. Для N кнопок вероятность угадывания есть 1/N. Будешь ты получать регистрацию роботов в N раз реже максимальной. К примеру, 10 в секунду вместо 50. Сильно легче? [img]images/smiles/icon_smile.gif[/img]
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 10:16:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения Oleg Fomin: <STRONG>братцы вы припухли? какие картитнки с нойсом? такими чекистскими методами вы коммюньити никогда не соберете. сответсно и флудить будет неинтересно.</STRONG><HR></BLOCKQUOTE>
Я воздержусь от теоретических обсуждений этого вопроса. Просто отсылаю к http://www.tripod.com/
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 10:17:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения Oleg Fomin: <STRONG>братцы вы припухли? какие картитнки с нойсом? такими чекистскими методами вы коммюньити никогда не соберете. сответсно и флудить будет неинтересно.</STRONG><HR></BLOCKQUOTE>
Я воздержусь от теоретических обсуждений этого вопроса. Просто отсылаю к http://www.tripod.com/
12 Сообщения: 886 Зарегистрирован: 15.01.01 Откуда: Масквыч я
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 12:24:00
Crazy В чем смысл ограничения регистрации? Нужно установить какой-либо буфер - например постить не более 6 сообщений в минуту в тему. Т.е. за минуту отправили 6 штук - седьмая не принимается (цифру шесть можно изменить на любую понравившуюся) - таким образом нету строгой паузы для всех пользователей, а для робота - самое то. Вот если робот постит в разные топики, то тогда начинаются серьезные проблемы - есть "люди-роботы", которые, дабы сэкономить свое время в инте, открывают кучу тем, уходят в оффлайн, пишут туеву хучу ответов и потом за пару минут отправляют их. Что делать с такими "ботами" я незнаю - как отличить их от реальных роботов и есть самая сложная задача. Можно попробовать сделать такую вещь - сделать какую-либо незначительную задержку при отправке сообщения (sleep в несколько секунд), но это спасет если робот работает одним потоком (кстати, для пользователя это не будет сильно заметно). Использовать уникальных сессий - не спасает. Это то же самое, что отключить к чертям правую кнопку мыши и кнопку shift - т.е. давать работать только в одном окне. На одном форуме, я знаю, сделали ограничение на постинги - один пост за 30 секунд (для новичков и гостей) и один пост в 10 секунд (это уже для старых мемберов).
12 Сообщения: 886 Зарегистрирован: 15.01.01 Откуда: Масквыч я
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 15:10:00
Crazy Уйдем немного от практики. Нам требуется запретить роботу постить кучу постингов в разные ветки. Для этого необходимо отличить робота от человека, не сильно затрудняя постинг. Отличия состоят лишь в том, что робот делает постинги с сумасшедшей частотой. При этом не стоит разделять пользователей - ситуация, когда за секунду делается несколько постингов - маловероятна. Поэтому обсчитывать надо весь форум обезличенно. Т.е. если создается ситуация с резким увеличением числа постингов в единицу времени, то делаем вывод, что робот работает, и прикрываем ему доступ.
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 17:04:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения -=SAS=-: <STRONG>. Нам требуется запретить роботу постить кучу постингов в разные ветки.</STRONG><HR></BLOCKQUOTE>
"В разные ветки" -- утверждение излишнее. Ибо нам нет разницы, как именно будет сыпаться мусор: новыми ветками или забивая заодно и существующие.
<STRONG>Отличия состоят лишь в том, что робот делает постинги с сумасшедшей частотой.</STRONG>
Ты не забываешь о том, что "робот" в общем случае -- это N параллельных потоков обращений к форуму, приходящих через M разных прокси и идентифицирующих себя как K разных UserAgent'ов?
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR><STRONG>При этом не стоит разделять пользователей - ситуация, когда за секунду делается несколько постингов - маловероятна. Поэтому обсчитывать надо весь форум обезличенно. Т.е. если создается ситуация с резким увеличением числа постингов в единицу времени, то делаем вывод, что робот работает, и прикрываем ему доступ.</STRONG><HR></BLOCKQUOTE>
Здесь все верно, но нет алгоритма. Как именно "прикрываем ему доступ"? С тем же успехом можно просто сказать: "защищаемся от флуда".
Итак, наша первая проблема -- определить, что данное конкретное обращение к форуму есть хит от робота. У нас в руках есть как статические данные (IP, Куки, URL), так и динамические данные (история предыдущих обращений к форуму вообще, отклассифицированноя по тем или иным параметрам).
Требуется: алгоритм, который по совокупности этих данных сможет отличить пользователя от робота с некоторой достаточно большой вероятностью (0.95, к примеру).
Вторая проблема: что мы будем делать, обнаружив робота? Всегда ли нам достаточно ограничиться просто отказом в обработке запроса или мы хотим чего-то большего?
12 Сообщения: 886 Зарегистрирован: 15.01.01 Откуда: Масквыч я
Заголовок сообщения: защита от флуда Добавлено: 25 Январь 2002, 23:17:00
Crazy Ты не забываешь о том, что "робот" в общем случае -- это N параллельных потоков обращений к форуму, приходящих через M разных прокси и идентифицирующих себя как K разных UserAgent'ов? Я описал далее, что нам неважен ни айпишник, ни юзерагент, ни что-то там еще. Мы сканируем активность в конференции. Алгоритм - тут можно очень сильно размахнуться - отслеживание ежечасной активности за пару-тройку суток и ведения статистики посещаемости с последующим сравнением текущей активности на конференции. Итак, наша первая проблема -- определить, что данное конкретное обращение к форуму есть хит от робота. У нас в руках есть как статические данные (IP, Куки, URL), Предлагаю отказаться от этого, т.к. все что может сделать польователь - может и робот.
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 11:43:00
Intelligent, друг мой, на прикручивание ECMAscript к WebL потребно где-то час-два. Имитировать DOM -- работа посуетливее, но тоже технически тривиальна. Итого за 2-3 дня можно создать нечто, что с точки зрения DHTML будет вести себя как браузер. [img]images/smiles/icon_smile.gif[/img] С другой стороны, привязывая форум к конкретной JS-среде мы огребаем кучу траблов с разными версиями браузеров.
Так что если мы хотим пойти этой дорогой, то нам нужно ориентироваться на наличие не браузера, а человека. Приведенный пример "картинка с цифрами" -- как раз из этой серии. Вариантов, кстати, может быть много. Один из примеров: пишет слово с очевидной опечаткой и просим ввести его правильный вариант. Правда, для некоторых пользователей это может стать непреодолимым барьером. [img]images/smiles/icon_smile.gif[/img]
12 Сообщения: 886 Зарегистрирован: 15.01.01 Откуда: Масквыч я
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 13:18:00
Intelligent На клиента такого рода защиту поставить низзя. Можно поступить еще проще - сгенерировать картинку с двумя-тремя буквами и попросить пользователя ввести их... Вот только как узнать, какая именно картинка была показана пользователю и что бы об этом робот не узнал... [img]insane.gif[/img]
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 13:39:00
Ну как тут не процитировать себя, любимого: [img]genius.gif[/img]
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения Crazy: <STRONG>3. То же, но пароль дается не текстом, в картинкой. Картинка слегка замусоривается, чтобы осложнить жизнь роботов.</STRONG><HR></BLOCKQUOTE>
Сделать распознавалку для таких картинок "на коленке" не получится. Так что пускай роботы смотрят.
Понятно, что приложив море усилий можно и это преодолеть. Но главный принцип защиты, как известно, гласит: усилия по преодолению защиты должны превышать эффект, достигаемый взломом защиты. [img]images/smiles/icon_smile.gif[/img]
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 17:03:00
Вот поэтому я и предложил разделить защиту на две части:
1. Вводим процесс регистрации средней геморройности. По мне прочесть 4 цифры и ввести их с клавиатуры -- недостаточноая причина, чтобы забить на регистрацию.
2. Ограничив скорость постинга зарегистрированных пользователей до некоторого разумного уровня (пусть он будет конфигурабелен) мы фактически защищается от замусоривания форума.
Кстати, имеет смысл ввести несколько уровней лимитов. К примеру: не более одного постинга в 30 секунд, 100 в час, 200 в сутки. Это отсекает тех, кто передаст роботам вручную зарегистрированные аккаунты, и, в то же время, не создает реальных проблем нормальным людям.
писать в код: <BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre> <a href="javascript:location.href='http://…'">Тема1</a> </pre><HR></BLOCKQUOTE> или <BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">code:</font><HR><pre> <a href="javascript:redir(1);">Тема1</a> </pre><HR></BLOCKQUOTE> а в функции redir() редирект таким образом (надежнее),а как параметр ключи к тому или иному топику, например номер топика - все это ну очень сильно собьет робота с толку.
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 17:14:00
<BLOCKQUOTE><font size="1" face="Verdana, Tahoma, sans-serif">quote:</font><HR>Автор Сообщения Dimaman: <STRONG>Мля, а почему пароль после регистрации не выдавать в виде картинки с шумом? </STRONG><HR></BLOCKQUOTE>
Ненавижу навязанные мне пароли. Но технически это эквивалентно описанной выше методике. Вся разница в том, что вводить придется не один раз. [img]images/smiles/icon_smile.gif[/img]
<STRONG>Переходы по ссылкам (темам, топикам) внутри форума сделать JavaScript'om:</STRONG>
См. выше про ECMAscript. А робота, который выкачивал платный новостной сайт с такими переходами я сдал клиенту еще два года назад. [img]images/smiles/icon_smile.gif[/img] Для этого и поддержку JS не пришлось использовать -- оказалось достаточно проанализировать скрипт и написать функциональный аналог на perl. [img]yes.gif[/img]
12 Сообщения: 886 Зарегистрирован: 15.01.01 Откуда: Масквыч я
Заголовок сообщения: защита от флуда Добавлено: 26 Январь 2002, 21:53:00
Crazy Кстати, имеет смысл ввести несколько уровней лимитов. К примеру: не более одного постинга в 30 секунд, 100 в час, 200 в сутки. Это отсекает тех, кто передаст роботам вручную зарегистрированные аккаунты, и, в то же время, не создает реальных проблем нормальным людям. Ну уже ж ведь описал, и вроде ты соглсился с тем, что робота от пользователя с помощью кук/айпишника/урла отличить невозможно. Не забывайте, постить так же могут и незарегенные пользователи [img]images/smiles/icon_sad.gif[/img]
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.