|
Поделиться

Защита от спама: Антибот 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 байт) Скачиваний: 168
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 840
Зарегистрирован: 22.08.13 09:05

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

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

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

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

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

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

test.png


Функция 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);
			}

Выводы делайте сами.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 840
Зарегистрирован: 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'] в обоих случаях был одинаков. В первом я просто забыл (или не счёл нужным) его добавить. Поэтому делаю вывод, что данный параметр тут тоже ни при чём.
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 840
Зарегистрирован: 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