Добро пожаловать, Гость!
анти дос
Общие вопросы | анти дос

анти дос
19 Марта 2014<?php
// каталог для хранения
временных файлов
$nf_path =$dir . '/engine/
data/anti_doss/' ;
// имя файла для юзера -
генерится из его IP-адреса
$nf_fip = $nf_path .
$_SERVER
[ 'REMOTE_ADDR' ];
// имя файла для
встроенного крона (должно
начинаться с точки)
$nf_fcron = $nf_path .
'.time' ;
//
// сек => кол-во
//
// не более скольки
загрузок
за сколько секунд можно
сделать,
// чтобы не получить игнор
//
$nf_flood =array(
10 => 15 , // не более 15
загрузок за 10 секунд
60 => 50 , // не более 60
загрузок за минуту
300 => 150 , // не более
150
загрузок за 5 минут
3600 => 500 , // не более
500 загрузок за час
);
$nf_cron_run = 300 ; // раз
в
сколько секунд проверять
старые файлы
$nf_old_file = 300 ; //
через
сколько секунд считать файл
старым (и удалять)
function cron_update
( $fn ,
$update ) {
if (! file_exists ( $fn ))
{
if (!@ touch ($fn )) {
echo 'Не могу создать
<strong>' . basename
($fn ). '</
strong>, проверьте права на
файлы (w+)<br/>' ;
return - 1;
}
}
else {
if ( time ()- filemtime
( $fn )<
$update ) {return 0;}
}
$f =@fopen ( $fn , 'r+' );
if (! $f ) {
echo 'Не могу открыть
<strong>' . basename
($fn ). '</
strong>, проверьте права на
файлы (r+)<br/>' ;
return - 1;
}
if (! flock ( $f , 6 ))
{return;}
$text =fgets ($f , 100 );
if ( time ()- intval
( $text )<
$update ) {return 0;}
fseek ($f , 0 ,SEEK_SET );
fwrite ( $f , time (). '
' );
fclose ( $f );
return 1 ;
}
$nf_cron_code = cron_update
( $nf_fcron ,
$nf_cron_run );
if ( $nf_cron_code ==- 1)
return;
if ( $nf_cron_code ==1 ) {
if ( $nf_dir =@opendir
( $nf_path )) {
$nf_time =time ()-
$nf_old_file ;
while (( $nf_tmp = readdir
( $nf_dir ))!== false ) {
if ( $nf_tmp [ 0 ]== '.' )
continue;
if ( filemtime( $nf_path .
$nf_tmp )<$nf_time &&
preg_match ( "!^[0-9]
{1,3}.
[0-9]{1,3}.[0-9]{1,3}.
[0-9]{1,3}$!" , $nf_tmp ))
{
if (! unlink( $nf_path .
$nf_tmp )) {
echo 'Не могу удалить
<trong>' .$nf_tmp . '</
strong><br/>' ;
}
}
}
closedir ( $nf_dir );
}
}
unset( $nf_cron_code );
if ( file_exists
( $nf_fip )) {
$nf_f =@fopen ( $nf_fip ,
'r+' );
if (! flock ( $nf_f , 6 ))
exit
( 'Ошибка запущен
паралельный
процесс!' );
if (! $nf_f ) {
echo 'Не могу открыть
<strong>' . basename
( $nf_fip ). '</strong> (r
+)<br/>' ;
return;
}
$nf_buf = fgets
( $nf_f ,1000 );
$nf_buf = explode( '|' ,
$nf_buf );
}
else {
for( $nf_i = 0; $nf_i
<count
( $nf_flood )*2 ; $nf_i +
+)
$nf_buf []= 0 ;
$nf_f =@fopen ( $nf_fip ,
'a+' );
if (! $nf_f ) {
echo 'Не могу создать
<strong>' . basename
( $nf_fip ). '</strong> (a
+)<br/>' ;
return;
}
if (! flock ( $nf_f , 6 ))
exit
( 'Ошибка запущен
паралельный
процесс!' );
}
$nf_i = 0 ;
$nf_stopflag = 0 ;
foreach ( $nf_flood as
$nf_k =>$nf_v ) {
if ( $nf_buf [ $nf_i +
1 ]+
$nf_k < time()) {
$nf_buf [ $nf_i ]=1 ;
$nf_buf [ $nf_i +1 ]=time
();
}
else {
if ( $nf_buf [ $nf_i ]>
$nf_v ) {
$nf_stopflag = 1 ;
$nf_buf [ $nf_i +1 ]=time
();
}
$nf_buf [ $nf_i ]++;
}
$nf_i += 2;
}
ftruncate ($nf_f , 0 );
fseek ($nf_f , 0 );
fputs ($nf_f , implode
( '|' ,
$nf_buf ));
if ( $nf_stopflag ) exit
( 'Сработала программа ANTI
DOSS.. Это значит что вы
либо хотели взломать сайт,
либо очень быстро
передвигались по сайту...
Доступ к сайту возобновиться
в течении 5минут' );
unset( $nf_f );
unset( $nf_i );
unset( $nf_k );
unset( $nf_v );
unset( $nf_stopflag );
unset( $nf_buf );
unset( $nf_fip );
unset( $nf_path );
unset( $nf_flood );
unset( $nf_cron_run );
unset( $nf_cron_idle );
}
?>
Комментарии:

revir (19 Марта 2014):
MaxtoR, слыш ты хочеш сказать что ета быдло код
revir, я хочу сказать, что это бесполезный код в условиях более-менее нормальной атаки. И дело тут не в коде. А в том, что для выполнения проверки серверу все равно нужно тратить свои ресурсы ибо PHP выполняется на сервере. Следовательно нагрузка все равно будет создаваться.MaxtoR, слыш ты хочеш сказать что ета быдло код

Не существует "анти ддоса" на PHP. Забудьте. Так как PHP - это серверный язык. И выполняется на сервере. Все равно, чтобы "прочекать" все условия, скрипту нужно будет по каждому процессу отработать. Да, возможно "чекалка" съест меньше ресурсов, чем сам "процесс", который пытается запустить атакующий. Но всё равно - с возрастанием кол-ва процессов, сервер рухнет от нагрузки "проверки процессов". Так что ерунда это всё

Автор темы
vitalik3005, создай для начяла фай на пример ani.php а етат код внутерь кинь