| |
|
|
| | Добрый день.
Подскажите пожалуйста, как можно защитить сайт от пользователей, которые патаются посностью слить весь сайт?
Просто у меня это уже не однократно происходит и хостор мне пачками шлёт письма о критической нагрузки на сервер, вот нужно что-то сделать! Они (админы хостера) сказали, что кто-то пытается слить весь сайт, они говорят что бы я защитил скрипты. Но как это сделать, я незнаю! | |
| |
|
|
|
| |
|
|
| |
для: Саня
(30.11.2006 в 12:12)
| | | Спасибо за ссылки! Но из них ясно, что защиты нету! только поисковики забаню!
Ещё варианты есть, кроме stop.php? | |
| |
|
|
| |
|
|
| |
для: Саня
(30.11.2006 в 12:12)
| | | Относительно первой ссылки
> автор: Loki (14.04.2006 в 10:44) письмо автору
> Прекрасный способ доказать поисковикам что вы прекрасно обойдетесь и без них:)
Думаю, что на поисковиках боты уже очень хорошо всё это знают и умеют обходить. | |
| |
|
|
| |
|
|
| |
для: tuder
(30.11.2006 в 12:44)
| | | А если я файл назову не stop.php, а как то иначе? Обойдёт? | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 12:46)
| | | Для предназначенной цели можно обзывать как угодно.
А если бот достаточно умный - то обойдёт.
Например, если после какой-то ссылки его забанят, то в следующий раз он её будет обходить. | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 11:56)
| | | Встречал такие настройки сервера: если в единицу времени склишком большое количество обращений с одного ip, то ip блокируется на 10 минут.
Но такую штуку можно реализовать и на php | |
| |
|
|
| |
|
|
| |
для: Loki
(30.11.2006 в 13:41)
| | | А как такое реализовать?
Просто мне хостер сказал, что если будет ещё хотя бы одна критическая нагрузка на сервер, мой сайт деактивируют!!! Вот мне и нужно это срочно! | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 15:57)
| | | Да на PHP если делать такое, то сама "защита" сервер может поставить в затруднительное положение :) | |
| |
|
|
| |
|
|
| |
для: Unkind
(30.11.2006 в 16:13)
| | | Чего делать то..????? | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 16:17)
| | | Переехать к другому хостеру с неперегруженным сервером. | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 16:17)
| | | На коленке:
В конфиге сайта ставим:
<?
define('_CNT',100); // Критическое значение обращений с одного IP
$ip = $_SERVER['REMOTE_ADDR'];
$query = mysql_query('DELETE FROM ip_table WHERE last_time>DATE_SUB(NOW(),interval 10 minute)'); // Удаляем ненужные записи старше 10 минут
mysql_query('INSERT INTO ip_table SET ip=\''.$ip.'\', last_time=NOW())'); // Записали IP пришедшего
$query = mysql_query('SELECT count(ip) as cnt FROM ip_table WHERE ip=\''.$ip.'\'');
$r = mysql_fetch_assoc($query);
if($r['cnt']>_CNT){
echo "Fuck you fucking spamer";
exit;
}
?>
|
То же можно на файлах организовать, но медленне будет | |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 16:55)
| | | А где взять этот конфиг?
Я бы переехал, но блин ещё 3 месяца оплачено! | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 17:02)
| | | Под конфигом я имею ввиду файл который подключается ко всем страницам сайта. | |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 17:04)
| | | Хороший пример исполнения защиты на мой взгляд! | |
| |
|
|
| |
|
|
| |
для: Уфимец
(30.11.2006 в 17:05)
| | | А вообще, у кого-нибудь такое было? Меня хостер заставляет перелопитить все скрипты! плюс к этому ещё и деактивировать хочет! А когда я говорю, что давай тека решайте вы проблему со своим сервером, который лежит 2-3 в неделю, они говорят, что всё гуд!
Но то что нагрузка идёт на сервер, это точно! и большая. | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 17:35)
| | | А можно этот код, прописать в index.php? а то у меня конфиг не везде подключается! | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 18:30)
| | | Тогда уж лучше так:
<?php
//Кол-во максимальных обращений с одного IP за 10 сек.
define("IPCNT", 50);
//Блок чистки БД от старых IP-адресов
$ct = (int) file_get_contents("clear");
if($ct < time())
{
mysql_unbuffered_query("DELETE FROM `ips` WHERE `ts` < ".time().";");
mysql_unbuffered_query("OPTIMIZE TABLE `ips`;");
$fd = fopen("clear", "w");
flock($fd, LOCK_EX);
$puts = fputs($fd, (time() + 120)); //Следующая чистка через 120 сек.
flock($fd, LOCK_UN);
fclose($fd);
}
//Конец блока чистки БД
//Подсчет запросов с данного IP за последние 10 сек.
$sql = mysql_query("SELECT COUNT(*) FROM `ips` WHERE `ip` = INET_ATON('".getenv("REMOTE_ADDR")."') AND `ts` < ".time().");");
//Если за 10 сек. запросов больше, чем разрешено
if(mysql_result($sql, 0) > IPCNT)
{
//Блокирование через .htaccess
$htaccess = $_SERVER['DOCUMENT_ROOT']."/htaccess";
$fd = fopen($htaccess, "a");
fwrite($fd, "Deny from ".getenv("REMOTE_ADDR")."\n");
fclose($fd);
die();
}
//Добавление запроса в базу данных
$sql = mysql_query("INSERT INTO `ips` SET `ip` = INET_ATON('".getenv("REMOTE_ADDR")."'), `ts` = ".(time() + 10).";");
?>
|
| |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 16:55)
| | | преобразовал код под себя
define('_CNT',100); // Критическое значение обращений с одного IP
$ip = $_SERVER['REMOTE_ADDR'];
$my->sql_query='DELETE FROM ip_table WHERE last_time>DATE_SUB(NOW(),interval 10 minute)'; // Удаляем ненужные записи старше 10 минут
$my->sql_execute();
$my->sql_query='INSERT INTO ip_table SET ip=\''.$ip.'\', last_time=NOW())'; // Записали IP пришедшего
$my->sql_execute();
$my->sql_query='SELECT count(ip) as cnt FROM ip_table WHERE ip=\''.$ip.'\'';
$my->sql_execute();
$r = mysql_fetch_assoc($my->sql_res);
if($r['cnt']>_CNT){
echo "Fuck you fucking spamer";
exit;
}
|
но чего-то он отказывается работать! (базу создал) | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 21:40)
| | | А в чём конкретно проблема.
Что не работает?
И чё-то какой-то странный класс $my. Можно его код посмотреть? Если уж делать надстройку над стандартными функциями работы с БД, то надо все эти функции засовывать в методы этого класса. А иначе зачем? :-/
чтобы не было недоразумений типа:
<? $my->sql_query='SELECT count(ip) as cnt FROM ip_table WHERE ip=\''.$ip.'\'';
$my->sql_execute();
$r = mysql_fetch_assoc($my->sql_res);?>
|
| |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 21:45)
| | | ошибок не выаёт, но в бд, не добавляет запись!
а класс $my он прописан в отдельном файле!
что нужно показать? | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 21:57)
| | | БД создана. А таблица создана? | |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 22:00)
| | | да, конечно! | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 22:06)
| | | вот, ещё отредактировал! всё вродебы нормально! ошибок нету, но в бд пусто!
define('_CNT',100); // Критическое значение обращений с одного IP
$ip = $_SERVER['REMOTE_ADDR'];
$my->sql_query="DELETE FROM ip_table WHERE last_time>DATE_SUB(NOW(),interval 10 minute)"; // Удаляем ненужные записи старше 10 минут
$my->sql_execute();
$my->sql_query="INSERT INTO ip_table SET ip='".$ip."', last_time=NOW())"; // Записали IP пришедшего
$my->sql_execute();
$my->sql_query="SELECT count(ip) as cnt FROM ip_table WHERE ip='".$ip."'";
$my->sql_execute();
$r = mysql_fetch_assoc($my->sql_res);
if($r['cnt']>_CNT){
echo "Fuck you fucking spamer";
exit;
}
|
а вот код бд
CREATE TABLE `ip_table` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(15) NOT NULL default '',
`cnt` int(3) NOT NULL default '0',
`last_time` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
| |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 22:19)
| | | Скобка лишняя
my->sql_query="INSERT INTO ip_table SET ip='".$ip."', last_time=NOW())"
|
cnt - непонятное поле. Зачем оно? | |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 22:37)
| | | Всё, спасибо, работает!
а критическое знчачение 100, это не много ли? и эта сотня. в какой промежуток времени?
чего то блокировка не срабатывает!!! сидел щёлкал, щёлкал, запись в бд обновляется, а банить не хочет!
и ещё одно, а может просто поставить небольшую задержку в начале страницы?
ну наподобие как в C++ (sleep) | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 23:07)
| | | Ну для теста можно значение с 100 до 10 спустить.
Да и вообще можно поставить 20-30 обращений в минуту одного IP. Уже понятно что качалка.
Ну собственно sleep в php тоже есть и задерживает выполнение скрипта. | |
| |
|
|
| |
|
|
| |
для: Axxil
(30.11.2006 в 23:22)
| | | Так может сделать sleep?
поставил 20 обращений в минуту! протестил, не банит!:( | |
| |
|
|
| |
|
|
| |
для: Diablo_
(30.11.2006 в 23:32)
| | | Я потестил у себ яэтот кусок от переобращений к скрипту..это не от масс скачки.. для этого есть другая тема.. Меня интересовало только защита от множественных запросов к скрипту без СКЛ и Файловой с. Короче Это можно как-то уменьшить..или усовершенствовать?
=======================================================
$Vremea_pereobrasheniea = 20; // 20 secund
$curtime = time();
$Sleep_pereobrasheniea = 20; // secundi sleepa, esli raskommentirovati i ubrati exit
if (!isset($_SESSION['pereobrasheniea'])) @session_register('pereobrasheniea');
if ( ($_SESSION['pereobrasheniea'] == "0") or (!isset($_SESSION['pereobrasheniea'])) )
{
$curtime_pere= $curtime+$Vremea_pereobrasheniea;
$_SESSION['pereobrasheniea']= $curtime_pere;
}else{
$pereobrasheniea_perem = $_SESSION['pereobrasheniea'];
$curtime_pere_2 = $pereobrasheniea_perem - $curtime ;
if (($curtime_pere_2 <= $Vremea_pereobrasheniea ) AND ($curtime_pere_2 >= 0) ) {
$curtime_pere= $curtime+$Vremea_pereobrasheniea;
$_SESSION['pereobrasheniea']= $curtime_pere;
/* sleep($Sleep_pereobrasheniea); */ exit ('NAHUI'); } else { $_SESSION['pereobrasheniea']= "0"; }
}
|
| |
| |
|
|
| |
|
|
| |
для: wemd
(01.12.2006 в 00:38)
| | | http://php.spb.ru/other/_dima_noflood.php вот держи и не мучайся.
Я когда то тоже пробывал это, но потом догнал, что как бы не защитил сайт, а роботов поисковых пускать надо. Поэтому нужно в обход защите хранить свежие базы роботовских айпишников и пропускать их, а так сайт навсегда зависнет в конце списка выдачи при поиске. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(01.12.2006 в 04:09)
| | | $agent_ip= $_SERVER['HTTP_USER_AGENT'];
//PROVERITI NA POISKOVIH BOTOV
$poiskovoi_bot = array("StackRambler", "Googlebot", "Yandex", "Aport", "msnbot", "FAST-WebCrawler", "Slurp/cat", "ASPseek/1.2.10", "CNSearch", "Yahoo", "psbot/0.1", "Rambler", "Mail", "MJ12bot", "TurnitinBot", "Snapbot", "Accoona-AI-Agent", "Jayde Crawler");
for ($i=0;$i<count($poiskovoi_bot);$i++) if (strpos($agent_ip,$poiskovoi_bot[$i])) $actionx=1;
ну и если $actionx=0, то баните..
|
| |
| |
|
|
| |
|
|
| |
для: wemd
(01.12.2006 в 12:08)
| | | ну боты то обновляются! ещё головная боль, что бы следить за их обновлениями! | |
| |
|
|
| |
|
|
| |
для: Diablo_
(01.12.2006 в 16:12)
| | | v logah smotri6i i vse | |
| |
|
|
| |
|
|
| |
для: wemd
(01.12.2006 в 17:41)
| | | У меня накопилось уже больше трех сотен юзерагентов, которых трудно однозначно идентифицировать... процентов 80 из них - различного рода роботы. Всех будем в массив вносить?:)
Да и опять же: качалки наверняка позволяют ставить любой юзерагент. | |
| |
|
|
| |
|
|
| |
для: Loki
(01.12.2006 в 17:55)
| | | Среди роботов, кстати, попадаются проверщики, которые смотрят не обманывают ли поисковый робот - если такой робот не найдёт страницы, которые нашёл поисковый робот, то поисковый движок будет считать, что роботам выдаётся одна информация, а людям другая. | |
| |
|
|
| |
|
|
| |
для: cheops
(01.12.2006 в 18:05)
| | | Если честно, то я так и не понял, как решить проблему!
Нужно что ли выбирать? либо юзеры, либо роботы! либо нагрузка на сервер! | |
| |
|
|
| |
|
|
| |
для: Loki
(01.12.2006 в 17:55)
| | | трех сотен юзерагентов= u menea site bil 450 тиц.. это все юзерагенты которые собрал... | |
| |
|
|
| |
|
|
| |
для: wemd
(01.12.2006 в 23:08)
| | | А Волга впадает в Каспийское море... | |
| |
|
|
| |
|
|
| |
для: Loki
(02.12.2006 в 21:30)
| | | :) | |
| |
|
|