Анти бот с баном для dle 8.5
Защита реализована следующим образом: мы переименовываем input, в который юзеру нужно записать свой логин при регистрации. При этом input со старым именем сохраняем в коде, но делаем скрытым при помощи CSS. При этом всех, кто будет отправлять какие-либо данные в input со старым именем, мы будем банить. Простые юзеры не видят его, и вводят логин в новое поле, а боты, как правило, не заморачиваются с парсингом стилей сайта, тупо отправляя POST-запрос с именами полей, характерными для DLE.
Предположим, новое поле будет называться urdgdtvfwecw
Открываем engine\modules\register.php
Находим:
$password1 = $_POST[‘password1’];
$password2 = $_POST[‘password2’];
Анти бот с баном для dle 8.5 в Одессе
Перед этими строками добавляем код, отвечающий за посылку нахуй всех, кто отправляет данные в input со старым именем:
if(!empty($_POST[‘name’])) {
$db->query( «INSERT INTO » . USERPREFIX . «_banned (descr, date, days, ip) values (‘Spambot protection’, ‘».(time()+(60*60*24*30)).»‘, ‘1’, ‘{$_IP}’)» );
die( «Hacking attempt!» );
}
А чуть ниже этих строк находим имя input’а
$name = $db->safesql( $parse->process( htmlspecialchars( trim( $_POST[‘name’] ), ENT_COMPAT, $config[‘charset’] ) ) );
и меняем его на новое:
$name = $db->safesql( $parse->process( htmlspecialchars( trim( $_POST[‘urdgdtvfwecw’] ), ENT_COMPAT, $config[‘charset’] ) ) );
Теперь в этом же файле находим javascript, отвечающий за проверку логина:
if(document.forms.registration.name.value == ») {
DLEalert(‘{$lang[‘reg_err_30′]}’, dle_info);return false;
}
и меняем имя поля. Должно получиться так: document.forms.registration.urdgdtvfwecw.value
Теперь открываем engine\classes\js\dle_js.js (по умолчанию он упакован, поэтому перед редактированием достаем неупакованный из дистрибутива DLE)
Находим функцию CheckLogin(), и меняем имя поля:
var name = document.getElementById(‘name’).value;
Должно получиться так:
var name = document.getElementById(‘urdgdtvfwecw’).value;
Теперь открываем файл шаблона registration.tpl (показано на примере шаблона Default, в других шаблонах код будет отличаться)
Находим поле для ввода логина:
<input type=»text» name=»name» id=’name’ style=»width:175px; margin-right: 6px;» class=»f_input» /><input class=»bbcodes» style=»height: 22px; font-size: 11px;» title=»Проверить доступность логина для регистрации» onclick=»CheckLogin(); return false;» type=»button» value=»Проверить имя» />
Теперь добавляем поле с новым именем. При этом старое поле остается в коде, но делается скрытым с помощью таблицы стилей (теперь оно будет «ловушкой» для ботов):
<input type=»text» name=»name» id=’name’ style=»width:175px; margin-right: 6px;» class=»f_input reglogin» /><input type=»text» name=»urdgdtvfwecw» id=’urdgdtvfwecw’ style=»width:175px; margin-right: 6px;» class=»f_input» /><input class=»bbcodes» style=»height: 22px; font-size: 11px;» title=»Проверить доступность логина для регистрации» onclick=»CheckLogin(); return false;» type=»button» value=»Проверить имя» />
Как видим, к старому input’у добавился стиль reglogin. Добавляем в любой CSSник шаблона код, скрывающий его:
.reglogin {
display: none !important;
}
После сохранения всех изменений обязательно проверяем работоспособность регистрации на сайте.
Вроде ничего не забыл. Но если оно будет работать как говно, это значит что я таки что-то забыл 😀