Простая анти-спам модификация для PunBB/FluxBB 1.2, написанная Мэттом Фретуэллом (Matt Fretwell (MattF)) в теме, посвящённой SAS-модификации sirena-ы на punbb.org. Готовясь к последним дням ветки версий 1.2, я решил отполировать эту модификацию немного. Изначальный код дополнен исправлениями ошибок, найденными Мэттом. Также я добавил языковую абстракцию.
Итак, это простая анти-спам модификация, основанная на тесте Тьюринга (арифметические или текстовые вопросы). Работает с высокой степенью эффективности (на форуме с небольшим объёмом траффика мне удаётся блокировать 100% автоматических регистраций). Протестировано на версиях 1.2.15, 1.2.18 — 1.2.20.
Планы
Поддержка защиты гостевых записей (post.php), больше языковых файлов (приму помощь с благодароностью, пишите на postmaster [at] theug [dot] pp [dot] ru), возможно включение администраторской панели. Затем, когда выйдет 3-я бета-версия FluxBB 1.3, я начну работу над расширением в новой системе.
Установка
1. Создайте ./include/user/sas.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?php session_start(); if (!isset($_SESSION['answer']) || $_SESSION['answer'] == '') { $number = rand(1, 5); // Измените второе число так, чтобы оно соответствовало числу вопросов. // Массив вопросов $questions = array( 'q1' => '4 + 5 =', 'q2' => '12 - 6 =', 'q3' => '3 + 2 =', 'q4' => '8 - 1 =', 'q5' => '8 - 4 =' ); // Массив подсказок $hints = array( 'h1' => 'На одно меньше, чем десять', 'h2' => 'На одно больше, чем пять', 'h3' => 'Без одного шесть', 'h4' => 'Столько дней недели', 'h5' => 'На одно больше, чем три' ); // Массив ответов $answers = array( 'a1' => '9', 'a2' => '6', 'a3' => '5', 'a4' => '7', 'a5' => '4' ); $_SESSION['hint'] = $hints['h'.$number]; $_SESSION['answer'] = $answers['a'.$number]; $_SESSION['question'] = $questions['q'.$number]; } ?> |
2. Для формы теста Тьюринга во время регистрации, шаги редактирования ./register.php:
Найдите в начале файла:
if ($pun_config['o_regs_allow'] == '0') { require_once PUN_ROOT.'header.php'; message($lang_register['No new regs']); }
Добавьте после:
// Подгрузим скрипт Simple Anti-Spam Redux и языковые файлы require_once PUN_ROOT.'include/user/sas.php'; require_once PUN_ROOT.'lang/'.$pun_user['language'].'/sas.php';
Найдите:
$language = $pun_config['o_default_lang'];
Добавьте после:
if (isset ($_POST['spamcode']) && $_POST['spamcode'] != '' && strtolower($_POST['spamcode']) == strtolower($_SESSION['answer'])) { session_unset(); session_destroy(); } else { session_unset(); session_destroy(); message($lang_sas['Spamcode failed']); }
Затем вставьте код формы в соответствующую часть кода файла:
<div class="inform"> <fieldset> <legend><?php echo $lang_sas['Anti-spam legend'] ?></legend> <div class="infldset"> <label> <b><?php echo $lang_sas['Question'] ?></b> <?php echo $_SESSION['question']; ?> <input type="text" name="spamcode" size="10" maxlength="10"/><br/> <b><?php echo $lang_sas['Hint'] ?></b> <?php echo $_SESSION['hint']; ?> <br/></label> </div> </fieldset> </div>
3. Языковой файл (создайте ./lang/English/sas.php и ./lang/Russian/sas.php):
1 2 3 4 5 6 7 8 9 10 11 | <?php // Language definitions used in Simple Anti-Spam Redux modification $lang_sas = array( 'Anti-spam legend' => 'Spambot prevention question', 'Question' => 'Question:', 'Hint' => 'Hint:', 'Spamcode failed' => 'The anti-spambot answer you supplied was incorrect. Please try again.' ); |
1 2 3 4 5 6 7 8 9 10 11 | <?php // Языковые перменные, используемые в модификации Simple Anti-Spam Redux $lang_sas = array( 'Anti-spam legend' => 'Защита против автоматической регистрации', 'Question' => 'Вопрос:', 'Hint' => 'Подсказка:', 'Spamcode failed' => 'Ответ на противоспамный вопрос, данный вами, был неверным. Пожалуйста, попробуйте ещё раз.' ); |
0 Ответов to “Simple Anti-Spam Redux”