Защита phpBB3 от спама своими методами.
Наверно тоже столкнулись с такой проблемой, бесконечный спам на форуме, не смотря на включенные защиты форума? Да-да, спам боты с каждым годом становятся все умнее и умнее, они умеют подтверждать регистрацию по почте, читать капчу от форума и капчу от сервиса ReCapcha, которая до недавнего времени считалась довольно хорошим фильтром.
На форуме по phpbb, пишут про создание обязательных полей, мне это абсолютно не помогло, поэтому я решил сделать небольшие фиксы сам. Вначале отключаем капчу в админской панели, далее, идем в папку:
/styles/<имя вашей папки шаблона>/template/ucp_register.html;
И находим там вот этот код:
<!-- IF CAPTCHA_TEMPLATE --> <!-- INCLUDE {CAPTCHA_TEMPLATE} --> <!-- ENDIF -->
И заменим его на:
<script type="text/javascript"> function on_update(){ var random_num = (Math.round((Math.random()*9)+1)); document.getElementById('reload').src = '/capcha/img.php?s='+random_num; } </script> <div class="panel"> <div class="inner"> <span class="corners-top"><span></span></span> <h3>Защита от спам ботов</h3> <p>введите код на картинке: <input type="text" name="numbs" id="numbs" size="40"></p> <img src="/capcha/img.php" id="reload" alt="" border="0"></div> <a href="javascript:on_update();" style="font-size:9px;">обновить картинку</a> </div> </div>
Этот HTML код содержит в себе свою капчу. Боты делают для большого числа форумов, по-этому если ваш форум имеет иную структуру, это довольно на долго уберет ботов.
Поставив этот html код, мы сбрасываем кэш в администраторской панели. Теперь нам надо в php код поставить проверку этих полей и свой код капчи.
Для того что бы это все заработало, откройте фаил /includes/ucp/ucp_register.php. Я поставил код в 221 строчке, сразу после:
if (!check_form_key('ucp_register')){ $error[] = $user->lang['FORM_INVALID']; }Я поставил следующий код:
session_start(); $_POST['numbs'] = (INT)$_POST['numbs']; $k = false; // проверка капчи if(empty($_SESSION['num']) && empty($_POST['numbs'])){ $error[] = 'Введите проверочный код'; } else if( $_SESSION['num'] != $_POST['numbs']){ $error[] = 'Проверочный код не совпадает с кодом на картинке!'; } unset($_SESSION['num']); session_destroy();
Итак, входящие данные мы проверяем на INT $_POST['numbs'], сравниваем с установленной сессией, сессию устанавливаем в генераторе капчи.
Теперь перейдем к созданию капчи. Создайте папку в корне форума capcha, там фаил img.php. Так же подберите у себя 3-4 шрифта, и скопируйте их в папку capcha. Шрифты берите ttf, не слишком тяжелые. Не берите рукописные и стандартные шрифты, лучше брать шрифт с разными шумами и засечками.
<? session_start(); header("Content-type: image/jpeg"); $w=120; // размеры капчи по ширине $h=40; // размеры капчи по высоте $im = imagecreatetruecolor($w,$h); $white = imagecolorallocate($im, 241,241,241); // цвет фона $red = imagecolorallocate($im, 0,0,102); $black = imagecolorallocate($im, 0,0,0); $black2 = imagecolorallocate($im, 0xbb,0xbb,0xbb); imagefill ($im,10,10,$white); $angle=0; $x=5; $text=''. mt_rand(10000,99999); $i=mt_rand(0,2); $text[$i+1]=$text[$i]; $i=mt_rand(0,2); $text[$i+1]=$text[$i]; $_SESSION['num']=$text; $path = dirname(__FILE__).'/'; $fonts = array('001.ttf','002.ttf','003.ttf'); // тут введите название ваших шрифтов! $s1=17; $s2=$s1-2; $angle=mt_rand(-5,5); for($i=0;$i<=4;$i++){ $y=32+mt_rand(0,2); $font=$fonts[mt_rand(0,count($fonts)-1)]; imagettftext($im, $s1, $angle, $x, $y, $red, $path.$font, $text[$i]); imagettftext($im, $s2, $angle, $x, $y, $black, $path.$font, $text[$i]); $x+=(17+mt_rand(0,2)); $angle+=2; } imageinterlace($im,1); imagejpeg($im,'',90); imagedestroy($im); ?>
В принципе, сделать это можно минут за 5. Не забудьте отключить старую капчу в администраторской панеле. Если вы увидели какие то неточности пишите в комментарии
Станьте первым!