SMF-движок один из самых любимых движков спамеров. Почему — сказать трудно, наверно, из-за дефолтных настроек двига, при которых каптча там очень лёгкая для распознавания автоматом, а также поставленная по умолчанию мгновенная регистрация юзера (без email подтверждения). И беда в том, что штатными средствами SMF тут не обойтись :(

Посмотрите на эту каптчу, устанавливаемую при создании нового форума:
captcha
Разные цвета букв хороши для удаления шума, небольшой наклон легко повернуть. Сделав её черно-белой, можно с лёгкостью определить символы. Эта каптча распознаётся автоматом.

Вот пример более сложной каптчи, которую можно выбрать в админке SMF — она там называется «hight (Высокая сложность)».
captcha2
Действительно, эту каптчу распознать заметно сложнее — разные шрифты, инвертирование, дополнительные линии для увеличения общего шума. Не знаю, насколько точно можно расшифровать эту каптчу, но думаю, если специально под неё заточить распознавание, то можно добиться 3-10% пробива. Собственно, это я и наблюдал на одном из своих форумов, где каждый день сваливалось по 3-8 сообщений спама.

Давайте посмотрим, что нам предлагает раздел модификаций SMF. Негусто, учитывая то, что проблема острая, а актуальных модов (не старше хотя бы года после последнего обновления) всего три:

Вторая, с часами — какая-то хрень, мне не понравилось, третья — это рекаптча, известная штука. Захотелось мне попробовать первый мод — AVVM :) Поставил — и нарадоваться не мог — он защищает не только от спама при постинге, но и от спама по личкам! Однако, чрз некоторое время начал получать недовольные отзывы от пользователей форума — оказывается, эта каптча не всегда правильно генерит картинку — иногда букв не хватает, т.е., требует для ввода пять символов, а на картинке — четыре. Парсинг оф.форума ничего не дал. Пришлось мне от неё отказаться :(

Поставил reCAPTCHA. Тоже хорошая каптча:
recaptcha
Правда, она только заменяет стандартную у SMF, и не встраивается при отправке ЛС. И ещё, если у вас форум на русском, то придётся немного поработать руками :), т.к. мод не русифицирован. На ней и остановился пока.

Окей, каптча поставлена, но спам всё равно проскакивает! Как же так? Ответ достаточно прост — это «китайцы». Дело в том, что есть сервисы, которые позволяют распознавать каптчи в ручном режиме. То есть, каптчу распознают живые люди, которые зарабатывают тем, что сидят и непрерывно вбивают каптчи. Стоимость такой работы очень низка, поэтому, обычно этим занимаются китайцы или индусы. И тут уже никакая (приемлимая для посетителей) каптча не спасёт — распознаваемость такого метода 90%.

Поэтому, что еще можно сделать для усиления защиты от спама:

  1. поставить подтверждение реги по мылу (members (пользователи) -> registration (регистрация) -> settings (настройки) -> Method of registration employed for new members (Способ регистрации новых пользователей) поставить «Member Activation» (активация пользователя)).
  2. создать дополнительные поля при регистрации (мод Custom Profile Field Mod позволяет добавить произвольные поля при регистрации и соответствующие условия их проверки).
  3. установить небольшой хак в forum/sources/post.php, перед комментарием
    	// Check the subject and message.

    Добавить код

    if (substr_count(strtoupper($_POST['message']), '[URL]') > 1) {
     if ($user_info['posts'] < 5 || $user_info['total_time_logged_in'] > 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'] = 'В сообщении слишком много внешних ссылок.';
    
  4. Чего делает этот хак: он выводит вышенаписанную ошибку при постинге в сообщении более одной ссылки следующим группам лиц :)
    — гостям
    — пользователям, у которых менее 5 сообщений
    — пользователям, которые находятся на форуме меньше одной минуты.

    Код довольно простой, я думаю, сами разберётесь и настроите под свои нужды. (кстати, идея не моя, а стырена отседова, правда, там с ошибками, я исправил и доработал. Спасибо мне :))

PS: А чего в итоге выбрал я? Я поставил рекаптчу и воспользовался третьим советом (со вставкой кода), т.к. не хотелось отказываться от возможности постинга гостями без регистрации.