Добро пожаловать, Гость!
анти дос
Общие вопросы | анти дос
revir :
<?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 );
}
?>
анти дос
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 );
}
?>
Комментарии:
MaxtoR 19 Марта 2014
revir (19 Марта 2014):
MaxtoR, слыш ты хочеш сказать что ета быдло код
revir, я хочу сказать, что это бесполезный код в условиях более-менее нормальной атаки. И дело тут не в коде. А в том, что для выполнения проверки серверу все равно нужно тратить свои ресурсы ибо PHP выполняется на сервере. Следовательно нагрузка все равно будет создаваться.MaxtoR, слыш ты хочеш сказать что ета быдло код
MaxtoR 19 Марта 2014
Не существует "анти ддоса" на PHP. Забудьте. Так как PHP - это серверный язык. И выполняется на сервере. Все равно, чтобы "прочекать" все условия, скрипту нужно будет по каждому процессу отработать. Да, возможно "чекалка" съест меньше ресурсов, чем сам "процесс", который пытается запустить атакующий. Но всё равно - с возрастанием кол-ва процессов, сервер рухнет от нагрузки "проверки процессов". Так что ерунда это всё
Не существует "анти ддоса" на PHP. Забудьте. Так как PHP - это серверный язык. И выполняется на сервере. Все равно, чтобы "прочекать" все условия, скрипту нужно будет по каждому процессу отработать. Да, возможно "чекалка" съест меньше ресурсов, чем сам "процесс", который пытается запустить атакующий. Но всё равно - с возрастанием кол-ва процессов, сервер рухнет от нагрузки "проверки процессов". Так что ерунда это всё
revir 19 Марта 2014
Автор темы
vitalik3005, создай для начяла фай на пример ani.php а етат код внутерь кинь
Автор темы
vitalik3005, создай для начяла фай на пример ani.php а етат код внутерь кинь