|
Креативная защита контента от абузеров
|
|
30.10.2015, 00:33
|
|
#1
|
Регистрация: 26.03.2011
Сообщений: 1,395
|
Креативная защита контента от абузеров
|
Сразу скажу для тех кто не читал предыдущую тему http://rebill.me/showthread.php?t=3128 что идея не моя. Себе могу присвоить лишь реализацию плана, который предложили slavegirl и player. Суть состоит в следующем - когда заходит пользователь из "черного списка" абузеров, он видит не сайт а стандартную заставку кемелхоста о том что сайт заблокирован администрацией
Какова реакция для обычного человека - акк заблочен, тут делать больше нечего.
Вчера я давал инструкцию для Vbulletin 3 и 4 серии, и в аську мне тут же начали писать о том что хотят видеть такую же защиту для других популярных движков - Wordpress, DLE И даже Vbulletin 5.
Ну раз желающих много, а я стараюсь всегда идти навстречу клиентам кемелхоста, решено было делать. Сам код не настолько сложен как думается, и вставить его сможет любой, кто хоть приближенно знаком с html.
Чтоб отсеять тех кто будет говорить о задержке работы сайта из-за большого числа айпишников, сразу скажу что проверил сегодня время работы со списком из 10,000 записей на разных ВПС-ах, и время работы скрипта составило всего за 0.004383 секунд. Это просто ничтожная задержка для сайта, которую ни один юзер не заметит. Итак, сама реализация
Первым делом ДЛЯ ЛЮБОГО САЙТА копируем свой список абузеров в файл ips.txt (название лучше выбирать рандомное, известное только вам, и в кодах менять указанное мной имя на свое). Заливаем его в корень сайта и выставляем права на файл 644.
Vbulletin 3.x, 4.x
1.В файл global.php делаем вставку в самом начале
<? $ip_array = file("ips.txt"); $ip_array = array_map('trim',$ip_array); $mask_ip = explode(".",$_SERVER['REMOTE_ADDR']) ; $us_mask=$mask_ip[0].".".$mask_ip[1].".".$mask_ip[2]."."; if ( ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) and ($_SERVER['REQUEST_URI'] != '/') )
{ header('Location: http://'.$_SERVER['HTTP_HOST'].'/'); exit; }
?>
2. в файле index.php делаем вставку тоже в самом начале
<? $ip_array = file("ips.txt"); $ip_array = array_map('trim',$ip_array); $mask_ip = explode(".",$_SERVER['REMOTE_ADDR']) ; $us_mask=$mask_ip[0].".".$mask_ip[1].".".$mask_ip[2]."."; if ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) { echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html> <body bgcolor=\"#FFFFFF\"> <title>Account disabled</title> <table border=0 width=100% height=100%> <tr> <td align=center><table border=0 cellpadding=0 cellspacing=0 width=300> <tr><td bgcolor=#000000><table border=0 cellpadding=3 cellspacing=1 width=300> <tr> <td align=center bgcolor=#FF0000><font color=#FFFFFF face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Information</b></font></td> </tr> <tr> <td align=center bgcolor=#FFFFFF><font color=#FF0000 face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Account disabled by server administrator.</b></font></td> </tr> </table></td></tr></table> <a href=\"http://ispsystem.com\" target=\"_blank\" style=\"text-decoration: none;\"><font color=#000000 face='Verdana, Arial, Helvetica, sans-serif' size=1>© ISPmanager control panel</font></a> </td> </tr> </table> </body> </html>"; exit(); } ?>
Vbulletin 5.x
Разработчики этой версии упростили нам работу. тут надо делать вставку только в один файл - index.php. Так же в самом начале
$ip_array = file("ips.txt"); $ip_array = array_map('trim',$ip_array); $mask_ip = explode(".",$_SERVER['REMOTE_ADDR']) ; $us_mask=$mask_ip[0].".".$mask_ip[1].".".$mask_ip[2].".";
if ( ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) and ($_SERVER['REQUEST_URI'] != '/') ) { header('Location: http://'.$_SERVER['HTTP_HOST'].'/'); exit; }
if ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) { echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html> <body bgcolor=\"#FFFFFF\"> <title>Account disabled</title> <table border=0 width=100% height=100%> <tr> <td align=center><table border=0 cellpadding=0 cellspacing=0 width=300> <tr><td bgcolor=#000000><table border=0 cellpadding=3 cellspacing=1 width=300> <tr> <td align=center bgcolor=#FF0000><font color=#FFFFFF face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Information</b></font></td> </tr> <tr> <td align=center bgcolor=#FFFFFF><font color=#FF0000 face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Account disabled by server administrator.</b></font></td> </tr> </table></td></tr></table> <a href=\"http://ispsystem.com\" target=\"_blank\" style=\"text-decoration: none;\"><font color=#000000 face='Verdana, Arial, Helvetica, sans-serif' size=1>© ISPmanager control panel</font></a> </td> </tr> </table> </body> </html>"; exit(); }
DLE 9.x-10.x
В самом начале index.php
$ip_array = file("ips.txt"); $ip_array = array_map('trim',$ip_array); $mask_ip = explode(".",$_SERVER['REMOTE_ADDR']) ; $us_mask=$mask_ip[0].".".$mask_ip[1].".".$mask_ip[2].".";
if ( ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) and ($_SERVER['REQUEST_URI'] != '/') ) { header('Location: http://'.$_SERVER['HTTP_HOST'].'/'); exit; }
if ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) { echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html> <body bgcolor=\"#FFFFFF\"> <title>Account disabled</title> <table border=0 width=100% height=100%> <tr> <td align=center><table border=0 cellpadding=0 cellspacing=0 width=300> <tr><td bgcolor=#000000><table border=0 cellpadding=3 cellspacing=1 width=300> <tr> <td align=center bgcolor=#FF0000><font color=#FFFFFF face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Information</b></font></td> </tr> <tr> <td align=center bgcolor=#FFFFFF><font color=#FF0000 face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Account disabled by server administrator.</b></font></td> </tr> </table></td></tr></table> <a href=\"http://ispsystem.com\" target=\"_blank\" style=\"text-decoration: none;\"><font color=#000000 face='Verdana, Arial, Helvetica, sans-serif' size=1>© ISPmanager control panel</font></a> </td> </tr> </table> </body> </html>"; exit(); }
Wordpress 3.x-4.x
Так же как и в ДЛЕ - в index.php в начале файла
$ip_array = file("ips.txt"); $ip_array = array_map('trim',$ip_array); $mask_ip = explode(".",$_SERVER['REMOTE_ADDR']) ; $us_mask=$mask_ip[0].".".$mask_ip[1].".".$mask_ip[2].".";
if ( ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) and ($_SERVER['REQUEST_URI'] != '/') ) { header('Location: http://'.$_SERVER['HTTP_HOST'].'/'); exit; }
if ( (in_array($us_mask, $ip_array) ) or (in_array(@$_SERVER['REMOTE_ADDR'], $ip_array) ) ) { echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html> <body bgcolor=\"#FFFFFF\"> <title>Account disabled</title> <table border=0 width=100% height=100%> <tr> <td align=center><table border=0 cellpadding=0 cellspacing=0 width=300> <tr><td bgcolor=#000000><table border=0 cellpadding=3 cellspacing=1 width=300> <tr> <td align=center bgcolor=#FF0000><font color=#FFFFFF face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Information</b></font></td> </tr> <tr> <td align=center bgcolor=#FFFFFF><font color=#FF0000 face='Verdana, Arial, Helvetica, sans-serif' size=2><b>Account disabled by server administrator.</b></font></td> </tr> </table></td></tr></table> <a href=\"http://ispsystem.com\" target=\"_blank\" style=\"text-decoration: none;\"><font color=#000000 face='Verdana, Arial, Helvetica, sans-serif' size=1>© ISPmanager control panel</font></a> </td> </tr> </table> </body> </html>"; exit(); }
Напомню - при этом у вас должен быть уже залит список айпишников абузеров. Список должен иметь формат
127.0.0.1
127.1.0.5
127.3.5.18 | Кроме полных айпишников можно втставлять маски из перх первых сегментов
Если не имеете своего списка, то вот тот что я смог собрать на форуме от разных людей http://rebill.me/showthread.php?p=84874#post84874
Это далеко не последние "сладости" для клиентов http://camelhost.net/. В дальнешем планирую выложить и другие интересные плюшки для защиты вашего контента от сноса. Среди них - работа над плагином шифрования, и дальнейшая реализация его под DLE.
Буду раз выслушать замечания, вопросы и предложения .
|
|
|
30.10.2015, 08:42
|
|
#2
|
Регистрация: 23.08.2013
Сообщений: 1,153
|
Ай спасибо!
|
|
|
30.10.2015, 10:25
|
|
#3
|
Регистрация: 14.05.2012
Сообщений: 652
|
для wordpress wp-ban чем хуже?...там тоже можно выставить список айпи и по маске и по домену и как угодно и прописать свою застваку
|
|
|
30.10.2015, 11:47
|
|
#4
|
Регистрация: 26.03.2011
Сообщений: 1,395
|
zazik, ничем. Никто не заставляет юзать плагин. Мой вариант лучше тем что он полностью имитирует блокировку домена - с редиректом на главную сайта. Я бы и не делал, но меня попросили дать вариант для ВП, хотя я писал в теме про этот плагин
|
|
|
30.10.2015, 12:19
|
|
#5
|
Регистрация: 31.03.2011
Сообщений: 583
|
Тема нужная. Спасибо.
|
|
|
30.10.2015, 12:20
|
|
#6
|
Регистрация: 14.05.2012
Сообщений: 652
|
не я просто спросил в чем может быть разница.....
|
|
|
30.10.2015, 15:26
|
|
#7
|
Регистрация: 07.10.2013
Сообщений: 275
|
Матрос спасибо большое!!!
|
|
|
30.10.2015, 15:36
|
|
#8
|
Регистрация: 11.02.2012
Сообщений: 2,241
|
Так, на заметку.
Если сайт работает под Клоудфларе, то данный метод будет бесполезен. Клара использует свой набор айпишников - по сути она является проксей.
Плюс клары - защита от ддоса, снижение нагрузки на сервер и снижение трафика путем кеширования на самой кларе.
Минусы - невозможность банить по ип адресу, от абуз не защищает - автоматом абузы перенаправляются вашему хостеру или в дц.
|
|
|
30.10.2015, 18:06
|
|
#9
|
Регистрация: 26.03.2011
Сообщений: 1,395
|
miraida, т.е. Клоудфларе изменяет айпишники посетителей?
|
|
|
30.10.2015, 18:15
|
|
#10
|
Регистрация: 23.08.2013
Сообщений: 1,153
|
Сообщение от Матрос
т.е. Клоудфларе изменяет айпишники посетителей?
| ничё они не меняют. Мираида полез в тему, в которой не разбирается, но ляпнуть хочется.
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0, гостей: 1)
|
|
|