0 Пользователей и 1 Гость просматривают эту тему.
  • 51 Ответов
  • 28746 Просмотров
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Проверяйте что приходит с базы данных. А еще можно проверить запись в файл .htaccess , указав вместо $lines_htaccess , любой IP
Код
file_put_contents($file_htaccess, '123.12.1.2');
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
о, нашелся сосед по несчастью...
тоже на хостинге jino.ru сижу и тоже долбят сайты сканированием и перегрузкой бездельники всякие.

может это еще и проблема jino.ru? за что собственно они берут в своем "премиум аккаунте" по тыще в месяц, если ты мучаешься как на хостинге за 100р -(

буду пробовать описанные выше вставки в index.php

(хотела было пробовать incapsula, но мне кажется этот вот вариант с блокировкой гораздо лучше, да и раньше на Joomla 1.5 мне кажется был прям такой плагин, который все это делал, а теперь найти не могу)
*

Koziavka

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
о, нашелся сосед по несчастью...
буду пробовать описанные выше вставки в index.php
Будьте осторожны! Уже не первый человек жалуется на какие-то глюки в этом Скрипте.
Вроди все нормально отрабатывает: IP заносится в БД. Но потом при добавке в .htaccess-файл вместо конкретных IP-адресов (из этой таблицы-черных-IP-шников) подставляется: "пусто".
Получается: "Deny from " и сайт полностью ложится по ошибке 50х.  :(
Так что, если будите ставить - постоянно мониторьте ситуацию. А еще лучше сами себя с тестовой машинки заДДОСьте и посмотрите, что получится...

ps
Жалко Автор Скрипта и этого ТОПика не хочет нам помочь и поправить эту досадную ошибку...
Так-то ж идея скрипта - классная. Чтобы оно еще и работало.   :'(
« Последнее редактирование: 09.01.2014, 12:10:19 от Koziavka »
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Так задай вопрос автору http://usefulscript.ru/avtoban.php
Цитировать
Роман   (00:03:43  20.09.2013)   # 1146   
Добрый день всё поставил, всё работает, заноситься в обе таблицы в базе, но в htaccess не заноситься не одна запись. Чем это может быть вызвано?
Administrator   (18:55:21  20.09.2013)   # 1150   
Проверьте, какие права доступа выставлены на .htaccess (возможно только чтение). Возможно, у Вас имеется какой-нибудь другой скрипт, который перезаписывает .htaccess заново.
Для проверки попробуйте заменить $file_htaccess=".htaccess"; на $file_htaccess="test.txt"; и тогда, когда скрипт сработает, у Вас должен будет появиться файл test.txt с забаненными IP адресами.
*

Koziavka

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Так задай вопрос автору http://usefulscript.ru/avtoban.php
О! За это спасибо!  :-)
*

Koziavka

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Цитировать
Добрый день всё поставил, всё работает, заноситься в обе таблицы в базе, но в htaccess не заноситься не одна запись. Чем это может быть вызвано?
Administrator   (18:55:21  20.09.2013)   # 1150   
Проверьте, какие права доступа выставлены на .htaccess (возможно только чтение).
Не мой случай. Ибо у меня в файл изменения пишет и сохраняет. Но только сам IP-шник в нужную строку не дописывает.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Не мой случай. Ибо у меня в файл изменения пишет и сохраняет. Но только сам IP-шник в нужную строку не дописывает.
А с БД приходит значение в скрипт ? я писал выше как проверить
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
у меня ничего никуда не записывается и в логах такая ошибка - PHP Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/users*****/index.php on line 23
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Цитировать
у меня ничего никуда не записывается и в логах такая ошибка - PHP Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/users*****/index.php on line 23.

На virtual shared hosting причина может быть в том, что в результате обращения к БД возвращается FALSE, так как привилегий на БД не хватает, даже если попытка создать БД SQL скриптом завершилась успехом, хотя не должна была. Можно в своей же БД создать эти таблицы. (или создать БД firewall в панели управления хостингом, а не скриптом).

Код
USE `имя вашей БД`;

#
# Table structure for table all_visits
#

CREATE TABLE `all_visits` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) DEFAULT NULL,
  `date` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


#
# Table structure for table black_list_ip
#

CREATE TABLE `black_list_ip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Это наверное нужно заменить:
Код
$link=mysql_connect("IP_БАЗЫ_ДАННЫХ","ЛОГИН","ПАРОЛЬ") or die("Could not connect: ".mysql_error());
mysql_select_db("firewall", $link);

На:
Код
$link=mysql_connect("localhost","ЛОГИН","ПАРОЛЬ") or die("Could not connect: ".mysql_error());
mysql_select_db("Имя вашей БД", $link);

Как бы там ни было, причина, похоже такая - нет ответа от MySQL, на мой взгляд.
« Последнее редактирование: 10.01.2014, 02:08:01 от capricorn »
*

siao

  • Захожу иногда
  • 233
  • 4 / 0

создать БД - не проблема, все создано. прописать настройки в самом коде: localhost, логин-пароль и указать имя своей БД - тоже все сделано.

*

winstrool

  • Давно я тут
  • 820
  • 51 / 2
  • Свободен для работы
еще один скриптик от httpflood защиты

отличие от первого:

  • js не нужен,
  • время, колличество обращений и т.п. настраивается циферками,
  • не притормаживает сайт,
  • исправно работает RSS и редиректы,
  • невозможна аттака с подменой user-agent  на бота

листинг:

Код
<?php

$cookie = $_COOKIE['yourcookie'];
$othercookie = $_COOKIE['yourothercookie'];

if($cookie && $othercookie > 0) $iptime = 20;  // Minimum number of seconds between visits for users with certain cookie
else $iptime = 10; // Minimum number of seconds between visits for everyone else

$ippenalty = 60; // Seconds before visitor is allowed back

if($cookie && $othercookie > 0)$ipmaxvisit = 30; // Maximum visits, per $iptime segment
else $ipmaxvisit = 20; // Maximum visits per $iptime segment

$iplogdir = "./tmp/";
$iplogfile = "iplog.dat";

$ipfile = substr(md5($_SERVER["REMOTE_ADDR"]), -2);
$oldtime = 0;
if (file_exists($iplogdir.$ipfile)) $oldtime = filemtime($iplogdir.$ipfile);

$time = time();
if ($oldtime < $time) $oldtime = $time;
$newtime = $oldtime + $iptime;

if ($newtime >= $time + $iptime*$ipmaxvisit)
{
touch($iplogdir.$ipfile, $time + $iptime*($ipmaxvisit-1) + $ippenalty);
$oldref = $_SERVER['HTTP_REFERER'];
header("HTTP/1.0 503 Service Temporarily Unavailable");
header("Connection: close");
header("Content-Type: text/html");
echo "<html><body bgcolor=#999999 text=#ffffff link=#ffff00>
<font face='Verdana, Arial'><p><b>
<h1>Temporary Access Denial</h1>Too many quick page views by your IP address (more than ".$ipmaxvisit." visits within ".$iptime." seconds).</b>
";
echo "<br />Please wait ".$ippenalty." seconds and reload.</p></font></body></html>";
touch($iplogdir.$iplogfile); //create if not existing
$fp = fopen($iplogdir.$iplogfile, "a");
$yourdomain = $_SERVER['HTTP_HOST'];
     if ($fp)
     {
     $useragent = "<unknown user agent>";
     if (isset($_SERVER["HTTP_USER_AGENT"])) $useragent = $_SERVER["HTTP_USER_AGENT"];
     fputs($fp, $_SERVER["REMOTE_ADDR"]." ".date("d/m/Y H:i:s")." ".$useragent."\n");
     fclose($fp);
     $yourdomain = $_SERVER['HTTP_HOST'];
     
     //the @ symbol before @mail means 'supress errors' so you wont see errors on the page if email fails.
if($_SESSION['reportedflood'] < 1 && ($newtime < $time + $iptime + $iptime*$ipmaxvisit))
     @mail('flood_alert@'.$yourdomain, 'site flooded by '.$cookie.' '
     .$_SERVER['REMOTE_ADDR'],'http://'.$yourdomain.' rapid website access flood occured and ban for IP '.$_SERVER['REMOTE_ADDR'].' at http://'.$yourdomain.$_SERVER['REQUEST_URI'].' from '.$oldref.' agent '.$_SERVER['HTTP_USER_AGENT'].' '
     .$cookie.' '.$othercookie, "From: ".$yourdomain."\n");
     $_SESSION['reportedflood'] = 1;
     }
     exit();
}
else $_SESSION['reportedflood'] = 0;

//echo("loaded ".$cookie.$iplogdir.$iplogfile.$ipfile.$newtime);
touch($iplogdir.$ipfile, $newtime); //this just updates the IP file access date or creates a new file if it doesn't exist in /iplog
?>

держит оборону от 500 флудильщиков одновременно(*на моем сервере)

демо http://likrion.ru

ps

для ботов настройте задержку в robots.txt


прикрепляю готовый файл -корневой index.php- для Joomla 2.5
Что если больше 500?, кто нить тестил намеренным ддосом?
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
У меня повалился мой сервер VDS при тестировании этого скрипта. Надо более детально с ним разобраться. Причина понятна - неправильная работа с БД.
« Последнее редактирование: 15.01.2014, 00:46:36 от capricorn »
*

winstrool

  • Давно я тут
  • 820
  • 51 / 2
  • Свободен для работы
У меня повалился мой сервер VDS при тестировании этого скрипта. Будем разбираться дальше, доведем дело до конца.
Консультирую один хостнг в вопросах безопасности веб систем и 90% на нем стоит Joomla, сайтов около 800 штук... щас разрабатываю компонент для Joomla для комплексного решения бональных вопросов, также и касающиеся от бональных ддос атак, интиресуют вопросы на сколько мощную аттаку могут выдержать подобные скрипты при взаимодействии с iptables
*

MrDimka

  • Новичок
  • 1
  • 1 / 0
  • быдлокодер
Все у кого выдает:

Код
<Limit GET POST> 
 order allow,deny
 deny from
 allow from all
</Limit>

там где:

Код
  for ($n=1; $n<=$number; $n++) {
   $htaccess_ip=mysql_fetch_array($result);
   $lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

поменяйте:
Код
$htaccess_ip[ip]


на

Код
$htaccess_ip[IP]

зы: найдите три отличия :))
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
Да, точно. Индексы должны быть большими буквами.

Цитировать
интиресуют вопросы на сколько мощную аттаку могут выдержать подобные скрипты при взаимодействии с iptables

Я поставил fail2ban. Честно говоря, удивился, сколько запросов идет к той же службе SSH. Завалило подобными письмами:

Спойлер
[свернуть]
Причем можно, как я понял, самому дополнять fail2ban на условия каких-то специфических атак. В станд установке он содержит фильтр против "плохих" ботов.
Спойлер
[свернуть]

Вот результат бана при попытке неудачного доступа по FTP.
Спойлер
[свернуть]

Т.е. без разницы IP - несколько попыток и бан.
« Последнее редактирование: 18.01.2014, 01:53:23 от capricorn »
*

likrion

  • Давно я тут
  • 750
  • 129 / 2
попробуйте изменить права для .htaccess и разрешить пользователю под которым вы работаете записывать в этот файл,  0644 кажется..
R331474010295
*

siao

  • Захожу иногда
  • 233
  • 4 / 0
да, полный превед
сайт упал наглухо
 [client 128.72.64.105] PHP Warning:  require_once(/home/users1/domains/.ru/libraries/import.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: \xcd\xe5\xf2 \xf2\xe0\xea\xee\xe3\xee \xf4\xe0\xe9\xeb\xe0 \xe8\xeb\xe8 \xea\xe0\xf2\xe0\xeb\xee\xe3\xe0 in /home/users1/.ru/administrator/includes/framework.php on line 32
[Thu Jan 30 13:12:10 2014] [error] [client 128.72.64.105] PHP Fatal error:  require_once() [<a href='function.require'>function.require</a>]: Failed opening required '/home/users1/.ru/libraries/import.php' (include_path='.:/usr/local/zend-5.3/share/pear') in /home/users1/.ru/administrator/includes/framework.php on line 32
« Последнее редактирование: 30.01.2014, 13:14:24 от siao »
*

naas

  • Новичок
  • 1
  • 0 / 0
Есть какой-то косяк в этом скрипте: скорее всего, он может запуститься несколько раз и тогда портит .htaccess.
В связи с этим у меня глупый вопрос: можно ли в .htaccess использовать что-то типа include, а сам "черный список" запихать в другой файл?
Код
<Limit GET POST> 
 order allow,deny
 include <black_list>
 allow from all
</Limit>
*

ast

  • Захожу иногда
  • 81
  • 6 / 0
У меня повалился мой сервер VDS при тестировании этого скрипта. Надо более детально с ним разобраться. Причина понятна - неправильная работа с БД.
Честно говоря, вообще не увидел никакого смысла нагружать БД чрезмерными запросами. Да, и сама идея постоянно дёргать БД со всем списком забаненных мне не нравится. Если будет реальная атака с большим количеством запросов, то излишняя нагрузка на БД скажется только в минус.

Новая версия скрипта ниже. В скрипте надо прописать адрес хоста, где находится MySQL, логин/пароль MySQL, БД MySQL.
Эта версия банит тех, кто обращается чаще 30 раз за 5 секунд.
Скрипт на создание таблицы:
Код
CREATE TABLE `all_visits` (
  `ip` varchar(15) DEFAULT NULL,
  `date` int(11) DEFAULT NULL,
  INDEX (`date` Desc)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Скрипт авто-бан (вставляем в index.php в корне сайта перед его содержимым):
Код
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    $ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else $ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Allowed_bot';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Allowed_bot';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Allowed_bot';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail.Ru')) {$bot='Allowed_bot';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Bing')) {$bot='Allowed_bot';}

if ($bot!='Allowed_bot') {

$link=mysql_connect("IP-адрес-MYSQL","Login_mysql","Password_mysql") or die("Could not connect: ".mysql_error());
mysql_select_db("ИМЯ_БД", $link);

 $result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('".$ip."','".time(true)."')");
 $result=mysql_query("SELECT count(1) FROM all_visits
         WHERE (ip='".$ip."' and date>'".(time(true)-5)."')", $link);
 $count_visit=mysql_fetch_array($result);

 if ($count_visit[0]>30) {
  $file_htaccess=".htaccess";
  $start_line=0;

  $lines=file($file_htaccess);
  for ($n=0; $n<=count($lines)-1; $n++) {
  $lines_htaccess[]=$lines[$n];
  if ($lines[$n] == "<Limit GET POST> \r\n") {
  $lines_htaccess[]=$lines[$n+1]; //order allow,deny
  $start_line=$n+2;
  break;
}
  }
 
  if ($start_line!=0) {
$lines_htaccess[]=" deny from ".$ip."\r\n";
for ($n=$start_line; $n<=count($lines); $n++) $lines_htaccess[]=$lines[$n];
  } else {
    $lines_htaccess = $lines;
    $lines_htaccess[]="<Limit GET POST> \r\n";
    $lines_htaccess[]=" order allow,deny \r\n";
    $lines_htaccess[]=" deny from ".$ip."\r\n";
    $lines_htaccess[]=" allow from all \r\n";
    $lines_htaccess[]="</Limit> \r\n\r\n";
  }
 
 file_put_contents($file_htaccess, $lines_htaccess);
 }
}
*

stib

  • Осваиваюсь на форуме
  • 33
  • 0 / 0
Вот нашел такой вариант защиты от HTTP-Flood атак, в интернете. Мои знания PHP не позволяют оценить скрипт. Подскажите стоит ли использовать такой вариант для защиты?
<?php
$salt='changeme';
$token=md5($_SERVER['REMOTE_ADDR'].$salt);
$searched='domen.ru';
if( @$_REQUEST['token']!=$token
/*||
strpos(
$_SERVER['HTTP_REFERER'],
$searched
)
===FALSE*/
){
$page_uri=$_SERVER['REQUEST_URI'];
?>
<html>
<head>
<script type="text/javascript"
<!--
function delayer(){
window.location = "<?php echo $page_uri; ?>";
document.cookie="token=<?php echo $token; ?>";
}
//-->
</script>
</head>
<body onload="setTimeout('delayer()', 500)"
<h2>Prepare to be redirected!</h2>
<p>This page is a time delay redirect, please update your bookmarks to our new
location!</p>
</body>
</html>
<?php
exit();
}
?>

цитирую автора: Настройка
changeme - Соль. Нужно установить уникальное значение. Желательно: sh1khJxFQWHalem
Используется для шифрования кукисов, передаваемых клиенту и при проверке сервером.
domen.ru - Ну тут просто, вставляете свой домен. Без www и http

Как работает?
-Как только пользователь попадает на Ваш сайт, ему устанавливается кукис (Его IP адрес + Соль указаная в скрипте), если это значение не совпадает - шлем в сторону моря такого посетителя (не грузим php)
-Так же иногда боты(ботоводы) любят устанавливать рандомные referer (От куда пришел посетитель). Тут же каждый раз идет проверка, если посетитель ходя по сайту, не имеет реферера сайта, мы его шлем в сторону моря.
-Предположительно что у таких ботов, нету возможности обрабатывать javascript что сразу же отшивает их от нашего php
-Даже если у них работает javascript предполагаем что боты тупые, и приходят или с загаданным кукисом или же с пустым, в результате так же у нас все хорошо.
-Если же бот обработал даже javascript и принял кукис, он кроме HTML сообщения о том, что его сейчас перешлют на другую страницу, нечего не получит. ===> не грузит php

На практике:
При таких атаках, с этим скриптом, нагрузка падала до минимума. Как только был сохранен этот скрипт, в index.php (на тот момент этот скрипт был под атакой), сразу же кроме трафика никакой нагрузки в системе не было. Апатч успокоился и вздохнул спокойно.
*

propmr

  • Новичок
  • 1
  • 0 / 0

там же все написано. 

как сделал я...
1 . создал новую базу (общую для всех сайтов(у меня их более 10)) firewall
2 . создал 2 таблицы -  укол:

Код
DROP DATABASE IF EXISTS `firewall`;
CREATE DATABASE `firewall` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `firewall`;

#
# Table structure for table all_visits
#

CREATE TABLE `all_visits` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) DEFAULT NULL,
  `date` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


#
# Table structure for table black_list_ip
#

CREATE TABLE `black_list_ip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


и воткнул скипт в index.php сайта (немного подправив)

листинг моего index.php


Код

<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    $ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else $ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) {$bot='Mail';}

if ($bot!='Yandex' and $bot!='Google' and $bot!='Yahoo' and $bot!='Mail') {

$link=mysql_connect("IP_БАЗЫ_ДАННЫХ","ЛОГИН","ПАРОЛЬ") or die("Could not connect: ".mysql_error());
mysql_select_db("firewall", $link);

 $result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('".$ip."','".time(true)."')");
 $result=mysql_query("SELECT count(id) FROM all_visits
         WHERE (ip='".$ip."' and date>'".(time(true)-10)."') LIMIT 1", $link);
 $count_visit=mysql_fetch_array($result);

 if ($count_visit[0]>30) {
  $result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");

  $file_htaccess=".htaccess";
$start_line=0;

    $lines=file($file_htaccess);
    for ($n=0; $n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST> \r\n") $start_line=$n;
    if ($start_line!=0) for ($n=0; $n<$start_line; $n++) $lines_htaccess[]=$lines[$n];
        else $lines_htaccess=$lines;

  $lines_htaccess[]="<Limit GET POST> \r\n";
  $lines_htaccess[]=" order allow,deny \r\n";

  $result=mysql_query("SELECT IP FROM black_list_ip ORDER BY INET_ATON(ip)", $link);
  $number=mysql_num_rows($result);

  for ($n=1; $n<=$number; $n++) {
   $htaccess_ip=mysql_fetch_array($result);
   $lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  $lines_htaccess[]=" allow from all \r\n";
  $lines_htaccess[]="</Limit> \r\n\r\n";

  file_put_contents($file_htaccess, $lines_htaccess);
 }
}



/**
 * @package Joomla.Site
 * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// Set flag that this is a parent file.
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__). '/defines.php')) {
include_once dirname(__FILE__). '/defines.php';
}

if (!defined('_JDEFINES')) {
define('JPATH_BASE', dirname(__FILE__));
require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';

// Mark afterLoad in the profiler.
JDEBUG ? $_PROFILER->mark('afterLoad') : null;

// Instantiate the application.
$app = JFactory::getApplication('site');

// Initialise the application.
$app->initialise();

// Mark afterIntialise in the profiler.
JDEBUG ? $_PROFILER->mark('afterInitialise') : null;

// Route the application.
$app->route();

// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER->mark('afterRoute') : null;

// Dispatch the application.
$app->dispatch();

// Mark afterDispatch in the profiler.
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;

// Render the application.
$app->render();

// Mark afterRender in the profiler.
JDEBUG ? $_PROFILER->mark('afterRender') : null;

// Return the response.
echo $app;




в итоге я имею небольшую защиту от ddos (конечно от нормального ддоса ничего не спасет но) от школьников и флудеров защиту держит..... все кто посылают более 30 запросов за 10 сек. автоматически прописываются в .htaccess и вход на сайт им "заказан"

вот то что на собиралось за пару дней


Код

<Limit GET POST>
 order allow,deny
 deny from 24.73.95.166
 deny from 93.114.209.43
 deny from 95.133.3.103
 deny from 177.65.17.250
 deny from 186.125.20.29
 deny from 187.5.14.235
 deny from 187.6.105.106
 deny from 187.149.20.46
 deny from 187.149.20.46
 deny from 189.70.226.140
 deny from 189.70.244.104
 deny from 189.74.19.214
 deny from 189.83.183.148
 deny from 189.105.93.161
 deny from 189.124.204.201
 deny from 190.193.81.191
 deny from 200.85.218.32
 deny from 200.171.248.197
 deny from 201.8.136.58
 deny from 201.43.2.236
 deny from 201.58.79.198
 deny from 201.81.20.159
 deny from 201.82.20.130
 deny from 212.45.25.97
 deny from 24.73.95.166
 deny from 93.114.209.43
 deny from 95.133.3.103
 deny from 177.65.17.250
 deny from 186.125.20.29
 deny from 187.5.14.235
 deny from 187.6.105.106
 deny from 187.149.20.46
 deny from 189.70.226.140
 deny from 189.74.19.214
 deny from 189.83.183.148
 deny from 189.105.93.161
 deny from 189.124.204.201
 deny from 190.193.81.191
 deny from 200.85.218.32
 deny from 200.171.248.197
 deny from 201.8.136.58
 deny from 201.43.2.236
 deny from 201.58.79.198
 deny from 201.81.20.159
 deny from 201.82.20.130
 deny from 212.45.25.97
 allow from all
</Limit>


причем каждый из этих IP пытался выполнить более 230 запросов в секунду (за минуту насчитал более 7800, но с заголовком ответа 403 такая цифра не страшна)

теперь я просто заменяю дефолтный index.php Joomla на свой подправленный....(Joomla 2.5)

Помогите пожалуйста организовать такую же защиту только для opencart
*

winstrool

  • Давно я тут
  • 820
  • 51 / 2
  • Свободен для работы
да принцип тот же, только в шапку встовляите:

Цитировать
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    $ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else $ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) {$bot='Mail';}

if ($bot!='Yandex' and $bot!='Google' and $bot!='Yahoo' and $bot!='Mail') {

$link=mysql_connect("IP_БАЗЫ_ДАННЫХ","ЛОГИН","ПАРОЛЬ") or die("Could not connect: ".mysql_error());
mysql_select_db("firewall", $link);

 $result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('".$ip."','".time(true)."')");
 $result=mysql_query("SELECT count(id) FROM all_visits
         WHERE (ip='".$ip."' and date>'".(time(true)-10)."') LIMIT 1", $link);
 $count_visit=mysql_fetch_array($result);

 if ($count_visit[0]>30) {
  $result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");

  $file_htaccess=".htaccess";
$start_line=0;

    $lines=file($file_htaccess);
    for ($n=0; $n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST> \r\n") $start_line=$n;
    if ($start_line!=0) for ($n=0; $n<$start_line; $n++) $lines_htaccess[]=$lines[$n];
        else $lines_htaccess=$lines;

  $lines_htaccess[]="<Limit GET POST> \r\n";
  $lines_htaccess[]=" order allow,deny \r\n";

  $result=mysql_query("SELECT IP FROM black_list_ip ORDER BY INET_ATON(ip)", $link);
  $number=mysql_num_rows($result);

  for ($n=1; $n<=$number; $n++) {
   $htaccess_ip=mysql_fetch_array($result);
   $lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  $lines_htaccess[]=" allow from all \r\n";
  $lines_htaccess[]="</Limit> \r\n\r\n";

  file_put_contents($file_htaccess, $lines_htaccess);
 }
}

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Доп. защита админки с jsecurelite

Автор ast

Ответов: 1
Просмотров: 1320
Последний ответ 16.02.2022, 13:37:25
от winstrool
Способы защиты сайта от DDoS атак?

Автор IgorMJ

Ответов: 7
Просмотров: 1226
Последний ответ 05.10.2021, 21:39:26
от ShopES
IPSecure - защита сайта от ботов

Автор SeBun

Ответов: 7
Просмотров: 5242
Последний ответ 05.12.2019, 23:42:43
от SeBun
Бесплатная защита сайта от взлома, парсеров, DDoS и других кибератак

Автор Core System

Ответов: 16
Просмотров: 2556
Последний ответ 09.06.2018, 14:58:54
от Core System
Защита от автоматической регистрации

Автор vasileo

Ответов: 0
Просмотров: 900
Последний ответ 14.12.2016, 05:19:14
от vasileo