Защита от спама форума SMF 1.1.x
Дата: 30 марта, 2010 год
SMF-движок один из самых любимых движков спамеров. Почему – сказать трудно, наверно, из-за дефолтных настроек двига, при которых каптча там очень лёгкая для распознавания автоматом, а также поставленная по умолчанию мгновенная регистрация юзера (без email подтверждения). И беда в том, что штатными средствами SMF тут не обойтись :(
Посмотрите на эту каптчу, устанавливаемую при создании нового форума:
Разные цвета букв хороши для удаления шума, небольшой наклон легко повернуть. Сделав её черно-белой, можно с лёгкостью определить символы. Эта каптча распознаётся автоматом.
Вот пример более сложной каптчи, которую можно выбрать в админке SMF – она там называется “hight (Высокая сложность)”.
Действительно, эту каптчу распознать заметно сложнее – разные шрифты, инвертирование, дополнительные линии для увеличения общего шума. Не знаю, насколько точно можно расшифровать эту каптчу, но думаю, если специально под неё заточить распознавание, то можно добиться 3-10% пробива. Собственно, это я и наблюдал на одном из своих форумов, где каждый день сваливалось по 3-8 сообщений спама.
Давайте посмотрим, что нам предлагает раздел модификаций SMF. Негусто, учитывая то, что проблема острая, а актуальных модов (не старше хотя бы года после последнего обновления) всего три:
- Advanced Visual Verification Mod (AVVM)
- Anti Bot: Captcha Clock
- reCAPTCHA for SMF
Вторая, с часами – какая-то хрень, мне не понравилось, третья – это рекаптча, известная штука. Захотелось мне попробовать первый мод – AVVM :) Поставил – и нарадоваться не мог – он защищает не только от спама при постинге, но и от спама по личкам! Однако, чрз некоторое время начал получать недовольные отзывы от пользователей форума – оказывается, эта каптча не всегда правильно генерит картинку – иногда букв не хватает, т.е., требует для ввода пять символов, а на картинке – четыре. Парсинг оф.форума ничего не дал. Пришлось мне от неё отказаться :(
Поставил reCAPTCHA. Тоже хорошая каптча:
Правда, она только заменяет стандартную у SMF, и не встраивается при отправке ЛС. И ещё, если у вас форум на русском, то придётся немного поработать руками :), т.к. мод не русифицирован. На ней и остановился пока.
Окей, каптча поставлена, но спам всё равно проскакивает! Как же так? Ответ достаточно прост – это “китайцы”. Дело в том, что есть сервисы, которые позволяют распознавать каптчи в ручном режиме. То есть, каптчу распознают живые люди, которые зарабатывают тем, что сидят и непрерывно вбивают каптчи. Стоимость такой работы очень низка, поэтому, обычно этим занимаются китайцы или индусы. И тут уже никакая (приемлимая для посетителей) каптча не спасёт – распознаваемость такого метода 90%.
Поэтому, что еще можно сделать для усиления защиты от спама:
- поставить подтверждение реги по мылу (members (пользователи) -> registration (регистрация) -> settings (настройки) -> Method of registration employed for new members (Способ регистрации новых пользователей) поставить “Member Activation” (активация пользователя)).
- создать дополнительные поля при регистрации (мод Custom Profile Field Mod позволяет добавить произвольные поля при регистрации и соответствующие условия их проверки).
- установить небольшой хак в forum/sources/post.php, перед комментарием
// Check the subject and message.
Добавить код
if (substr_count(strtoupper($_POST['message']), '[URL]') > 1) { if ($user_info['posts'] 60 || $user_info['is_guest']) { $post_errors[] = 'too_many_links'; } }
А также добавить в дефолтную тему в языковые файлы Errors.english.php и Errors.russian-utf8.php описание ошибки, которое будет выводиться:
$txt['error_too_many_links'] = 'The message contains too many external links.'; $txt['error_too_many_links'] = 'В сообщении слишком много внешних ссылок.';
Чего делает этот хак: он выводит вышенаписанную ошибку при постинге в сообщении более одной ссылки следующим группам лиц :)
– гостям
– пользователям, у которых менее 5 сообщений
– пользователям, которые находятся на форуме меньше одной минуты.Код довольно простой, я думаю, сами разберётесь и настроите под свои нужды. (кстати, идея не моя, а стырена отседова, правда, там с ошибками, я исправил и доработал. Спасибо мне :))
PS: А чего в итоге выбрал я? Я поставил рекаптчу и воспользовался третьим советом (со вставкой кода), т.к. не хотелось отказываться от возможности постинга гостями без регистрации.