Защищаем PHPBB от спама и ботов с помощью reCaptcha
Защищаем PHPBB от спама и ботов с помощью reCaptcha
Сегодня же хотелось бы поговорить об еще одном действенном методе убивающим сразу двух зайцев. Я буду привязывать reCaptcha к PHPBB 2, да еще и на Windows платформе.
Что такое reCaptcha?
Очень сомневаюсь, что Вы еще не слышали о ней, но однозначно хотя-бы видели обычную «капчу». Те, кто еще вообще не знаком о том, как устроена методика распознавания действий человека от действий компьютера (бота, программ спам постинга и т.п.) могут бегло ознакомиться с термином Captcha и там-же вскольз узнать о том, что такое reCaptcha и понять почему Вы будете убивать двух зайцев — своего и чужого.
Лень кликать? Могу подытожить:
reCaptcha родилась в университетских стенах Carnegie Mellon University и косвенной причиной ее создания стала проблема оцифровки книг для проекта Internet Archive, когда системы оптического распознавания текста не справились со своей задачей ввиду сильной искаженности исходного текста и не смогли выполнить 100% распознавания.
Суть методики следующая: Вам предлагаются ввиде стандартной капчи два слова, одно заранее известно системе, т.е. уже распознано, другое нет. Если Вы правильно распознаете известное, значит система считает, что Вы возможно правильно ввели и то, которое еще небыло распознано. Для лучшей достоверности это слово предлагается для распознавания еще несколько раз другим пользователям системы. Таким образом Вы помогаете оцифровке книг и защищаетесь от ботов.
Собственно сама идея не нова, припоминаю, что Google, а в частности Google Images уже активно использовал решение по привлечению людских интернет ресурсов для распознавания и тегирования изображений.
Таким образом, если Вы решили прикрутить сие чудо к своему PHPBB, а его можно использовать не только там, но и везде где Вам захочется (на официальном сайте уже есть ссылки на кучу готовых модулей для WordPress, Drupal, vBulletin и т.д.), то Вам необходимо выполнить несколько шагов, о которых и пойдет речь.
Вообще сейчас для PHPBB доступны два модуля — один для установки на странице регистрации и другой для гостевого постинга. Я буду рассматривать установку только для страницы регистрации, т.к. гостевой постинг у меня всегда отключен. (Принцип: «Хочешь сказать что то дельное и хочешь что-бы к тебе прислушались — представься пожалуйста», — снимает многие проблемы)
Итак, начнем.
Скачиваем свежий модуль, распаковываем архив и копируем файлы recaptchalib.php и usercp_register.patch в директорию PHPBB — includes, а файл profile_add_body.tpl.patch в директорию Ваших шаблонов (скинов, шкурок … не знаю как Вы их называете), у меня, к примеру, это без вариантов — templates/subSilver/.
По инструкции пытаемся пропатчить код PHPBB. Заходим в includes, и без намека на подвох запускаем магическую команду:
patch -b usercp_register.php < usercp_register.patch
и получаем ответ:
«patch» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
из которого вполне очевидно, что мы не такие «крутые программеры» у которых всегда под рукой есть такие замечательные утилитки как patch, diff и т.п., а «изготовители» модов для PHPBB наверняка настолько увязли в Linux’е, что посчитали без надобности объяснять, как такое легко сделать под Windows.
Что-ж, придется ставить магическую утилитку patch, если таковой нет. Ее можно взять либо из проекта Cygwin, либо напрямую отсюда из GnuWin32.
Устанавливаем ее, снова запускаем команду и получаем новую ошибку:
patching file usercp_register.php
Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application’s support team for more information.
Что-бы понять причину проблемы мне пришлось очень активно «порыться» в Интернет. Хотя, как оказалось, проблема на виду и кроется в Unix формате патч файлов usercp_register.patch и profile_add_body.tpl.patch (Unix строки заканчиваются одним символом LF, тогда как в Windows необходимо два CR+LF). Поэтому в Windows, формат файлов надо перевести в «нужный», к примеру так:
more usercp_register.patch >usercp_register.new.patch
more profile_add_body.tpl.patch >profile_add_body.tpl.new.patch
Все, наконец-то, после всего этого можно спокойно выполнить патчинг, немного добавив параметров:
patch -lb usercp_register.php -i usercp_register.new.patch
patch -lb profile_add_body.tpl -i profile_add_body.tpl.new.patch
С установкой закончили, переходим к конфигурированию и запуску.
Регистрируемся на reCaptcha сайте, добавляем в профиль свой домен и получаем личные public и private ключи, которые вставляем в соответствующие значения переменных $recaptcha_public_key и $recaptcha_private_key, находящиеся в файле usercp_register.php (тот, который в папке includes/).
Теперь последний важный аккорд, заставляем reCaptcha выглядеть по русски (на досуге можно даже заняться его кастомизацией).
Я просто добавил в начало файла profile_add_body.tpl следующее:
<script>
var RecaptchaOptions = {
lang : ‘ru’
};
</script>
На этом все, Вы должны получить что-то типа такой reCaptch’и (будьте здоровы :) ):
