|
Поделиться

Защита от спама: Антибот 100500

Лучшая на данный момент защита от ботов

Хаки, скрипты, BB-коды и другие вещи, не оформленные в виде полноценных модов, но способствующие улучшению функциональности движка.

Сообщение Shredder » 19.11.15 00:01

Идея хука основана на том, что большинство ботов не могут исполнять JS-скрипты. Во время отправки сообщений хук проверяет, включён ли в вашем браузере Javascript, и если нет, то выдаёт ошибку, не давая размещать пост.

Автор: Nekstati
Установка:
Разархивировать хук в папку includes/hooks вашего форума, очистить кеш.
Перед установкой убедитесь, что в шаблоне overall_footer.html вашего стиля присутствует переменная {DEBUG_OUTPUT}, и если нет, то добавьте её. Иногда эта переменная бывает удалена, особенно в мобильных стилях. Без неё защита работать не будет.

Чтобы не вводить в заблуждение и не отпугнуть живых посетителей, у которых, например, отключён в браузере JS, можете в language/ru/common.php найти:
Код: Выделить всё
	'FORM_INVALID'			=> 'Ошибка отправки формы. Попробуйте ещё раз.',

и заменить на:
Код: Выделить всё
	'FORM_INVALID'			=> 'Ошибка отправки формы. Попробуйте ещё раз. Проверьте, включён ли у вас Javascript.',


hook_antibot100500.zip
(777 байт) Скачиваний: 284
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 937
Зарегистрирован: 22.08.13 09:05

Сообщение vladimir1983 » 19.11.15 01:05

Снеси ты этот антибот100500. Достало на каждой отправке поста:
Аватара пользователя
vladimir1983
 
Сообщения: 40
Зарегистрирован: 19.01.14 05:09

Сообщение Shredder » 19.11.15 10:16

Есть, есть такое про Антибот. Именно в 3.0, т.к. здесь phpBB 3.0. Насчёт 3.1 ничего не знаю. Но лучше пусть выскочит это предупреждение в 1 разе из 10-ти, чем каждый день буду пачками удалять ботов и их писанину.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 937
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 19.11.15 10:34

vladimir1983 писал(а):Снеси ты этот антибот100500. Достало на каждой отправке поста:
Вот интересно, почему это у Вас проявляется ? Какие-то осбенности браузера ? Сам я с таким ни разу не встречался, но некторые сообщают о проблеме, причины не выявлены.

Про антибот конечно совершенно иная тема, может отделить... Мне вот совершенно непонятна причина происходящего. Было множество версий, все лопнули. Поскольку у меня не проявляется - то и не поймаю. Вот и спрашиваю об условиях проявления...
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Xisp » 19.11.15 16:56

Shredder писал(а):Есть, есть такое про Антибот.

Ни разу не было, Tor Browser.
Xisp
 
Сообщения: 196
Зарегистрирован: 05.04.14 18:00

Сообщение Shredder » 19.11.15 22:19

Постоянно бывает эта ошибка в FF. Не слишком часто, но один раз из 20-ти точно вылезает. Сильно не мешает. Браузер FF, Adblock для этого сайта отключён (хотя он тут не должен влиять). Никаких других особых условий не заметил.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 937
Зарегистрирован: 22.08.13 09:05

Сообщение Shredder » 05.12.15 22:18

Итак, залогинился на форуме, сразу же пишу пост - пост создаётся нормально. Через 4 минуты дополняю уже созданный пост новым - путём авто-объединения при помощи мода Posts Merging, вываливается "Ошибка отправки формы. Попробуйте ещё раз.". Смотрю функцию check_form_key( внутри includes/functions.php движка, сверяю тестовые данные с переменными этой функции, выведенными на экран во время ошибки, вижу такую картину:



Функция check_form_key( позволяет отправить пост только при возвращении значения true, иначе выводится ошибка отправки формы. Значение true выводится только при следующем условии:
Код: Выделить всё
 			if ($key === $token)
			{
				return true;
			}

Остальной код функции (на уровень и на два выше) не привожу, т.к. на скрине прекрасно видно, что не выполняется именно это условие, все остальные там выполняются, я посчитал.

Переменные имеют следующие значения:
Код: Выделить всё
$key = sha1($creation_time . $user->data['user_form_salt'] . $form_name);
$token = request_var('form_token', '');

$creation_time = 1449338574;
$form_name = 'posting';

$key = '9b2e856ac1479177ba7289423aeaf3af1d0b4cb5';
$token = 'd09141c5791664ee72e7612a598cd69a1b897292';

Значение $user->data['user_form_salt'] генерируется только в двух местах:
1. Функция user_add(, т.е. во время регистрации пользователя, код:
'user_form_salt' => unique_id(),
2. Функция session_create( в includes/session.php, код:
Код: Выделить всё
			if ((int) $row['sessions'] <= 1 || empty($this->data['user_form_salt']))
			{
				$this->data['user_form_salt'] = unique_id();
				// Update the form key
				$sql = 'UPDATE ' . USERS_TABLE . '
					SET user_form_salt = \'' . $db->sql_escape($this->data['user_form_salt']) . '\'
					WHERE user_id = ' . (int) $this->data['user_id'];
				$db->sql_query($sql);
			}

Выводы делайте сами.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 937
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 06.12.15 11:01

Да, все это и прочее видел, но публиковать выводы пока не намерен.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Shredder » 06.12.15 13:21

После написанного выше ошибка повторялась ещё дважды, и каждый раз было то же самое: $token не совпадает с $key
$this->data['user_form_salt'] в обоих случаях был одинаков. В первом я просто забыл (или не счёл нужным) его добавить. Поэтому делаю вывод, что данный параметр тут тоже ни при чём.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 937
Зарегистрирован: 22.08.13 09:05

Сообщение c61 » 07.12.15 09:13

Аналгичные исследования проводились на нескольких конференциях phpbb 3.1.x. Для поиска бага была установлена ловушка в posting с записью в лог. Было выявлено несколько ситуаций:
  1. нормальное срабатывание антибота, когда в браузере отключен js;
  2. ошибки отправки формы, когда антибот отключен для зарегистрированного пользователя, при этом время жизни формы явно истекло;
  3. ошибки отправки формы, когда антибот отключен для зарегистрированного пользователя, при этом form_token не совпадает с вычисляемым key, что идентично результатам, полученным Shredder'ом.
В случае 2 разница времён между creation_time и time_now иногда составляла до нескольких суток, при этом session_time и time_now изменялись в сторону увеличения при повторных попытках пользователя отправить собщение, а creation_time оставался неизменным. Наиболее вероятно, это фича быстрого ответа, поскольку при стандартном ответе creation_time изменяется и повторная отправка формы проходит. Наиболее часто такие ошибки проявлялись на айфонах, девайсах под андроидом версии 4.3 и ниже, на разных мобильных устройствах, а также на маках.

В случае 3 определено однозначно, что в check_form_key session_time больше creation_time. Следовательно, по факту приёма формы session_time обновляется. Что странно, такое может происходить только для бота, что следует из кода session_create. Как будто начинается новая сессия, ни с того, ни с сего... Поскольку параметры, из которых создаётся токен формы, и в случае создания токена для формы, и в случае проверки, на первый взгляд одинаковы, складывается впечатление, что дурит механизм сессий... У меня всё-таки остаются подозрения насчет user_form_salt, полномасштабную проверку пока не добавлял, ибо ясности пока нет - набираю статистику. Приведенный Shredder'ом код
Код: Выделить всё
			if ((int) $row['sessions'] <= 1 || empty($this->data['user_form_salt']))
			{
				$this->data['user_form_salt'] = unique_id();
несомненно может приводить к изменению user_form_salt.

Поскольку наиболее часто ошибки отправки формы проявлялись на серверах nginx c его же включенным кэшированием, была проверена версия, что настройки кэширования не давали гарантий того, что разные пользователи не получат одну и ту же сессионную Cookie. Кэширование отключали, ошибка отправки формы всё равно появлялась, но вопрос не был полностью изучен из-за недостатка времени, так что вероятность проявления ошибки из-за неправильных настроек кэширования остаётся.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение c61 » 01.01.16 17:27

Выпустил версию 0.2.0 для phpBB 3.1.x, см. phpBB 3.1 ext antibot100500: Антибот 100500. Добавлена расшифровка ошибки отправки формы - почему она собственно произошла... Там же в первом сообщении - патч для устранения предполагаемого бага в коде phpBB, годится для 3.0.x и 3.1.x. Патч абсолютно безопасен, но устранена ли ошибка, связаная с некорректной диагностикой "ошибки отправки формы", пока неизвестно, ибо достаточная статистика ещё не набрана.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Xisp » 02.01.16 04:13

c61 писал(а): патч для устранения предполагаемого бага в коде phpBB,

найти
Код: Выделить всё
$token = sha1($now . $user->data['user_form_salt'] . $form_name . $token_sid);

и заменить на
Код: Выделить всё
$token = sha1(strval($now) . $user->data['user_form_salt'] . $form_name . $token_sid);

Что то я сомневаюсь, что что-то изменится. Хоть убейте, но PHP должен сам приводить тип к строке в данном случаи, помогать ему не нужно.
Xisp
 
Сообщения: 196
Зарегистрирован: 05.04.14 18:00

Сообщение c61 » 02.01.16 10:22

Посмотрим. Других версии пока нет, а логичное обьяснение есть, и оно известное, а открывать все карты пока рано.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение c61 » 03.01.16 17:35

Ошибка в add_form_key не подтвержена. Выпустил очередную версию с дополнительной диагностикой... Мы так года два будем искать баг неизвестно где и, вполне вероятно, так и не найдём :-D Нужны какие-то кардинальные меры... Патч рекомендую оставить, если применили, хуже не будет.
Аватара пользователя
c61
Разработчик модов
 
Сообщения: 249
Зарегистрирован: 24.08.13 16:46

Сообщение Xisp » 03.01.16 20:25

c61 писал(а):Ошибка в add_form_key не подтвержена.


Кто бы сомневался.
Xisp
 
Сообщения: 196
Зарегистрирован: 05.04.14 18:00

След.

Вернуться в Расширение возможностей phpBB 3.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron