Вход Регистрация
Файл: crons/scanfiles.php
Строк: 133
<?

include("../config.php");
include(
"../autoconfig.php");
include(
"database.php");
include(
"notifier.php");


if(isset(
$_POST['dosf'])) $dosf addslashes(htmlspecialchars(strip_tags(trim($_POST['dosf'])))); // 1 - сканинг всех файлов, 2 - образ санти 3 - selfdefense САНТИ, 4 - сканинг БД
elseif(isset($_GET['dosf'])) $dosf addslashes(htmlspecialchars(strip_tags(trim($_GET['dosf']))));
elseif(isset(
$dosf)) {}
else die(
0);

if(isset(
$_POST['silent']))
    
$silent addslashes(htmlspecialchars(strip_tags(trim($_POST['silent'])))); // 1 - режим молчания, 0 - уведомления и бд
else
    
$silent 0;

$dirfrom "";

switch (
$dosf)
{
    case 
"1":
        if(!
STATUS_FILES) die();
        
$dirfrom '../../';
        
$dbfile "scfiles.sfa";
        
$bads=array('.','..','cache','rss.xml','sitemap.xml','error_log'SANTI_PATH);
        
$badext=array('.gif','.jpg','.JPG','.pdf','.jpeg','.png','.bmp','.log','.xml.gz','/images');
        
autopilots_add_time(1);
      break;
    case 
"3":        
        
$dirfrom='../';
        
$dbfile "sscfiles.sfa";
        
$bads=array('.','..','datas''error_log''config.php''autoconfig.php');
        
$badext=array('.log');
        
autopilots_add_time(6);    
        break;
    default:
        die(
"2");
        break;
}

$far '';
$out='';
$curdir='';
$ouf='';
$far1 '';
$elapsed '';

if (!
function_exists('file_put_contents')) {
    function 
file_put_contents($filename$data) {
        
$f = @fopen($filename'w');
        if (!
$f) {
            return 
false;
        } else {
            
$bytes fwrite($f$data);
            
fclose($f);
            return 
$bytes;
        }
    }
}

scan_start();

function 
scan_start()
{
    global 
$dbfile$far$out$dirfrom$curdir$ouf$far1$elapsed$silent$dosf$buneed;
    
$far=unserialize(file_get_contents('../datas/scaninfo/'.$dbfile));

    foreach(
$far as $k=>$f$far1[$k]=1;

    
$curdir=realpath('.');
    
chdir($dirfrom);
    
$basdir=realpath('.');

    
recurdir($basdir);

    
$ouf='';
    foreach(
$far1 as $k=>$f) {
        
$ouf.="$k<br>";
        unset(
$far[$k]);
    }
    if(
$ouf
    {
        
$out.="nУдаленные файлы:<br>$oufn";
        if(
$silent != 1)
        {
            
objects_add("-"19"удаление файлов: ".str_replace("<br>"" ; "$ouf), 30);
        }
    }

    if(
$out){
        if (
$dosf == 3
            
$buneed true;

        
$out=str_replace("&nbsp;&nbsp;","",$out);

        
$text "Файловый автопилот зафиксировал изменения в файловой структуре:<br><br>".$out;
        if(
$silent != 1)
        {
            
send_mail("Уведомление файлового автопилота"$text);
            
send_sms("Событие от САНТИ ФС. Критичность: высокая!");
        }        
    }

    
chdir($curdir);
    if(
$dosf != 3file_put_contents('../datas/scaninfo/'.$dbfile,serialize($far));
}

function 
recurdir($d){
    global 
$bads,$badext;

    
$dh  opendir($d);
    while (
false !== ($filename readdir($dh))) {
        
$aa[] = $filename;
    }
    
    
$ddir=substr($d,strrpos($d,'/')+1).'/';
    foreach(
$aa as $f){
        if(
in_array($f,$bads) or in_array($ddir.$f,$bads)) continue;
        
$yy=0;
        foreach(
$badext as $e)
            if(
substr($f,-strlen($e))==$e) {$yy=1;break;}
        if(
$yy)continue;
        
$d1=$d.'/'.$f;
        if(
is_dir($d1)) {
            
recurdir($d1);
        }
        else { 
// действие с файлом $d1
            
chf($d1);
        }
    }
}

function 
mydate($nw){
    if (!
$nw) { return "&nbsp;"; }
    if (
$nw=="0000-00-00 00:00:00" || $nw=="0000-00-00") { return "---"; }

    if (
substr_count($nw," ")==0) {
        
$b explode ("-"$nw);
        
$dbdate mktime(0,0,0,$b[1],$b[2],$b[0]);
        
$nw strftime("%d.%m.%Y",$dbdate);
    } else {
        
$a explode (" ",$nw);
        
$b explode ("-"$a[0]);
        
$c explode (":"$a[1]);

        
$dbdate mktime($c[0],$c[1],$c[2],$b[1],$b[2],$b[0]);
        
$nw strftime("%d.%m.%Y %H:%M",$dbdate);
    }
    if (!
$nw) { return "---"; } else return $nw;
}

function 
chf($f){
    global 
$far$far1$out$silent$dosf;
    
$now=time();
    
$o='';
    
$obd='';
    
$mod=0;
    if((
$dosf!=3)&&(!isset($far[$f]))) {
        
$far[$f]['mtime']=filemtime($f);
        
$far[$f]['size']=filesize($f);
        
$far[$f]['crc']=crc32(file_get_contents($f));
        
$far[$f]['timestamp']=$now;
        
$o="<br>Новый файл - новое время: ".mydate(date('Y-m-d H:i:s'$far[$f]['mtime']))."<br><br>";        
        if(
$silent != 1)
        {
            
objects_add($f0"новое время ".mydate(date('Y-m-d H:i:s'$far[$f]['mtime'])), 30);
        }        
    }
    else {
        unset(
$far1[$f]);
        if((
$fsiz=filesize($f))!=$far[$f]['size'])
        {
            
$mod=1;$o.="<br>Новый размер: ".filesize($f);$o.="<br>Старый размер: ".$far[$f]['size'];
            if(
$silent != 1)
            {
                
objects_add($f1"новый размер ".filesize($f)." | старый размер ".$far[$f]['size'], 30);
            }
        }
        if((
$dosf!=3)&&(($ftim=filemtime($f))!=$far[$f]['mtime']))
        {
            
$mod=1;$o.="<br>Новое время: ".mydate(date('Y-m-d H:i:s',$ftim));$o.="<br>Старое время: ".mydate(date('Y-m-d H:i:s',$far[$f]['mtime'])).";";
            if(
$silent != 1)
            {
                
objects_add($f1"новое время ".mydate(date('Y-m-d H:i:s',$ftim))."| старое время ".mydate(date('Y-m-d H:i:s',$far[$f]['mtime'])), 30);
            }
        }
        if((
$dosf!=3)&&(($fcrc=crc32(file_get_contents($f)))!=$far[$f]['crc']))
        {
            
$mod=1;$o.="<br>Изменилось содержимое файла. ";
            if(
$silent != 1)
            {
                
objects_add($f1"изменилось содержимое файла"30);
            }
        }
        if((
$dosf!=3)&&($mod==1))
        {
            
$o.="<br>Права на файл: ".get_chmod($f)."<br><br>";
            if(
$silent != 1)
            {
                
objects_add($f2"права: ".get_chmod($f), 30);
            }
        }
    }
    if(
$mod){
        
$t['mtime']=     $far[$f]['mtime'];
        
$t['size']=      $far[$f]['size'];
        
$t['crc']=       $far[$f]['crc'];
        
$t['timestamp']= $far[$f]['timestamp'];

        
// храним 4 посл изменения
        
if(@count($far[$f]['old'])>3){
            
$ts='2019-01-01';
            foreach(
$far[$f]['old'] as $k=>$v){
                if(
strtotime($k)<strtotime($ts))$ts=$k;        
            }
            unset(
$far[$f]['old'][$ts]);
        }
        
$far[$f]['old'][date('Y-m-d H:i:s',$now)]=$t;

        if(isset(
$ftim)) $far[$f]['mtime']=$ftim;
        
$far[$f]['size']=$fsiz;
        if(isset(
$fcrc)) $far[$f]['crc']=$fcrc;
        
$far[$f]['timestamp']=$now;

    }

    if(
$o$out.="nФайл: $fn$on";
}

function 
get_chmod($f){
    
$perms fileperms($f);

    if ((
$perms 0xC000) == 0xC000) {
        
// Socket
        
$info 's';
    } elseif ((
$perms 0xA000) == 0xA000) {
        
// Symbolic Link
        
$info 'l';
    } elseif ((
$perms 0x8000) == 0x8000) {
        
// Regular
        
$info '-';
    } elseif ((
$perms 0x6000) == 0x6000) {
        
// Block special
        
$info 'b';
    } elseif ((
$perms 0x4000) == 0x4000) {
        
// Directory
        
$info 'd';
    } elseif ((
$perms 0x2000) == 0x2000) {
        
// Character special
        
$info 'c';
    } elseif ((
$perms 0x1000) == 0x1000) {
        
// FIFO pipe
        
$info 'p';
    } else {
        
// Unknown
        
$info 'u';
    }

    
// Owner
    
$info .= (($perms 0x0100) ? 'r' '-');
    
$info .= (($perms 0x0080) ? 'w' '-');
    
$info .= (($perms 0x0040) ?
            ((
$perms 0x0800) ? 's' 'x' ) :
            ((
$perms 0x0800) ? 'S' '-'));

    
// Group
    
$info .= (($perms 0x0020) ? 'r' '-');
    
$info .= (($perms 0x0010) ? 'w' '-');
    
$info .= (($perms 0x0008) ?
            ((
$perms 0x0400) ? 's' 'x' ) :
            ((
$perms 0x0400) ? 'S' '-'));

    
// World
    
$info .= (($perms 0x0004) ? 'r' '-');
    
$info .= (($perms 0x0002) ? 'w' '-');
    
$info .= (($perms 0x0001) ?
            ((
$perms 0x0200) ? 't' 'x' ) :
            ((
$perms 0x0200) ? 'T' '-'));

    return 
$info;
}

?>
Онлайн: 1
Реклама