ruBook (com_rubook) на Joomla 1.0 — защита от спама
Интеграция kcaptcha.
Отключаем в настройках ruBook стандартную защиту. Далее правятся файлы. (Проверялось на версии 0.4.3.)
1. /components/com_rubook/rubook.html.php
после:
<?php if ( is_imgcode() ) { ?> <tr> <td><?php echo _COM_RUBOOK_LANG_FIELD_ENTER_CODE; ?></td> <td><input type="text" class="inputbox" name="info[imgcodetext]" maxlength="7" style="width: 130px" /></td> <td colspan="2"><img src="<?php echo $GLOBALS['mosConfig_live_site']; ?>/components/com_rubook/imgcode.php"></td> </tr> <?php } ?>
дописываем:
<tr> <td><?php echo _COM_RUBOOK_LANG_FIELD_ENTER_CODE; ?></td> <td><input type="text" class="inputbox" name="info[keystring]" maxlength="7" style="width: 130px" /></td> <td colspan="2"><img src="<?php echo $GLOBALS['mosConfig_live_site']; ?>/imgcode/?<?php echo session_name()?>=<?php echo session_id()?>" /></td> </tr>
<?php echo $GLOBALS['mosConfig_live_site']; ?>/imgcode/
— путь к файлам kcaptcha, т.е. в примере распаковываем содержимое архива в папку imgcode в корне сайта.
2. components/com_rubook/rubook.class.php
после
/** Проверка кода защиты */ if ( ( $GLOBALS['mosRuBookConfig_imgcode'] == 1 ) and ( $GLOBALS['mosRuBookUser_admin'] != 1 ) ) { if ( ! ( $_SESSION['img_code'] == md5( $object->imgcodetext ) ) ) { $object->_error = _COM_RUBOOK_LANG_CODE_BAD; return false; } }
дописываем:
if (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] != $object->keystring) { $object->_error = _COM_RUBOOK_LANG_CODE_BAD; return false; }
после:
$object->imgcodetext = ( isset( $info['imgcodetext'] ) ) ? $info['imgcodetext'] : '';
дописываем:
$object->keystring = ( isset( $info['keystring'] ) ) ? $info['keystring'] : '';
после:
$this->imgcodetext = ( isset( $info['imgcodetext'] ) ) ? $info['imgcodetext'] : '';
дописываем:
$this->keystring = ( isset( $info['keystring'] ) ) ? $info['keystring'] : '';
Проверка значения параметра REFERER.
Т.е. адреса страницы, откуда выполнен переход. Если этот параметр пустой значит запрос к форме выполняется напрямую.
if ($_SERVER["HTTP_REFERER"] == '') { $object->_error = "Spam Detected!"; return false; }
Проверка, не содержит ли коммент ссылку
Лучше наверное добавить какую-то регулярку для проверки на наличие ссылок, но сейчас поступим более параноидально:
if (preg_match("/http/i", $object->text)) { $object->_error = "Links in the comments are not allowed!"; return false; }
чтото не вижу архива с каптчей
Спасибо, очень помогла ваша статья!