HERE; $act=isset($_POST['act']) ? $_POST['act'] : 0; if(!$act) $act=isset($_GET['act']) ? $_GET['act'] : 0; if($act==1) { $nick=isset($_POST['nick']) ? $_POST['nick'] : ''; $pass=isset($_POST['pass']) ? $_POST['pass'] : ''; if($nick===$admin_nick && $pass===$admin_pass) $_SESSION['isadmin']=1; $act=0; } if(!isset($_SESSION['isadmin']) || !$_SESSION['isadmin']) { print << Вход в систему
Логин:
Пароль:
HERE; exit(); } print "
Site File Checker $ver

"; switch($act) { case '2': $dirs=isset($_POST['dirs']) ? $_POST['dirs'] : 0; $alldirs=isset($_POST['alldirs']) ? $_POST['alldirs'] : 0; if(!$dirs || !is_array($dirs) || count($dirs)<1 || !$alldirs || !is_array($alldirs) || count($alldirs)'); break; case '3': if(!isset($_FILES['ch']) || !$_FILES['ch']['tmp_name'] || $_FILES['ch']['error']) redir("Выберите файл с данными проверки."); $f=fopen($_FILES['ch']['tmp_name'],"r"); if(!$f) { @unlink($_FILES['ch']['tmp_name']); redir("Не удалось открыть файл."); } $tmp=fgets($f); $tmp=fgets($f); clearstatcache(); $found=0; while(1) { $tmp=str_replace(array("\r","\n"),array('',''),fgets($f)); if(!$tmp) break; $calldirs[]=$tmp; } $tmp=fgets($f); while(1) { $tmp=str_replace(array("\r","\n"),array('',''),fgets($f)); if(!$tmp) break; if($tmp) $cdirs[]=$tmp; } $tmp=fgets($f); while(!feof($f)) { $tmp=str_replace(array("\r","\n"),array('',''),fgets($f)); if(!$tmp) break; $cfiles[]=$tmp; $csums[$tmp]=str_replace(array("\r","\n"),array('',''),fgets($f)); $cdates[$tmp]=str_replace(array("\r","\n"),array('',''),fgets($f)); $tmp=fgets($f); } fclose($f); @unlink($_FILES['ch']['tmp_name']); $dirs=Array(); $ptf=substr($_SERVER["SCRIPT_FILENAME"],0,strlen($_SERVER["SCRIPT_FILENAME"])-strlen(strrchr($_SERVER["SCRIPT_FILENAME"],'/'))); read_all_dirs($ptf); adminmenu(2); print""; foreach($dirs as $dr) { if(!in_array($dr,$calldirs)) { $found=1; print ""; } } foreach($calldirs as $dr) { if(!in_array($dr,$dirs)) { $found=1; print ""; } } $totalfiles=Array(); foreach($cdirs as $dr) { if(!file_exists($dr)) continue; $files=read_files($dr); $totalfiles=array_merge($totalfiles,$files); foreach($files as $fl) { if(!in_array($fl,$cfiles)) { $found=1; print ""; } } } foreach($cfiles as $fl) { if(!in_array($fl,$totalfiles)) { $found=1; print ""; continue; } $newmd5=md5_file($fl); if($newmd5!==$csums[$fl]) { $found=1; print ""; continue; } $newftime=filemtime($fl); if($newftime!=$cdates[$fl]) { $found=1; print ""; } } if(!$found) print ""; die('
Найденные отличия
Файл/ДиректорияОтличие
".htmlspecialchars($dr)."Найдена новая директория (в ней файлов: ".num_files($dr).")
".htmlspecialchars($dr)."Директория удалена
".htmlspecialchars($fl)."Найден новый файл (MD5: ".md5_file($fl).")
".htmlspecialchars($fl)."Файл удалён
".htmlspecialchars($fl)."Файл был изменён (начальный MD5: ".$csums[$fl]."; новый MD5: $newmd5)
".htmlspecialchars($fl)."Файл был изменён (начальное время изменения: ".date("d.m.Y H:i:s",$cdates[$fl])."; новое время изменения: ".date("d.m.Y H:i:s",$newftime).")
Отличий не найдено!
'); break; } $mnu=isset($_GET['mnu']) ? $_GET['mnu'] : 0; if($mnu!=="0" && $mnu!=="1" && $mnu!=="2" && $mnu!=="3" && $mnu!=="4") $mnu=0; if($mnu<3) adminmenu($mnu); switch($mnu) { case '0': print <<Информация
Скрипт Site File Checker поможет убедиться в том, что файлы Вашего проекта не были изменены, то есть не содержат вредоносных вставок и не изменялись злоумышленниками. Скрипт просчитает контрольные суммы файлов в директории, в которую он загружен, а также во всех вложенных директориях. Также будет сохранено время последних изменений файлов. При проверке будут сравниваться директории (будут отображены новые и удалённые), файлы в анализируемых директориях (будут отображаться новые, удалённые файлы, а также те, у которых отличаются MD5 или дата последнего изменения). HERE; break; case '1': print "
Расчёт контрольных сумм и времени изменения файлов

Найденные директории:
"; $dirs=Array(); $ptf=substr($_SERVER["SCRIPT_FILENAME"],0,strlen($_SERVER["SCRIPT_FILENAME"])-strlen(strrchr($_SERVER["SCRIPT_FILENAME"],'/'))); read_all_dirs($ptf); foreach($dirs as $dr) { $dr=htmlspecialchars($dr); print " $dr
"; } print "
"; break; case '2': print <<Проверка контрольных сумм и размеров файлов
Выберите файл, содержащий данные проверки:
HERE; break; case '3': $_SESSION['isadmin']=0; redir("Вы вышли из системы."); break; case '4': $_SESSION['isadmin']=0; if(@unlink($_SERVER['SCRIPT_FILENAME'])) die("Скрипт был удалён."); else redir("Не удалось удалить скрипт"); break; } die(''); function read_all_dirs($dr='/') { global $dirs; $dirs[]=$dr; $d=opendir($dr); if(!$d) die("Ошибка при открытии директории."); $elem=readdir($d); while($elem) { if($elem!='..' && $elem!='.' && filetype($dr.'/'.$elem)=='dir') read_all_dirs($dr.'/'.$elem); $elem=readdir($d); } } function read_files($dr='/') { $files=Array(); $d=opendir($dr); if(!$d) die("Ошибка при открытии директории."); $elem=readdir($d); while($elem) { if($elem!='..' && $elem!='.' && filetype($dr.'/'.$elem)=='file') $files[]=$dr.'/'.$elem; $elem=readdir($d); } return $files; } function num_files($dr='/') { return count(read_files($dr)); } function adminmenu($itm=0) { global $lang; for($i=0;$i<3;$i++) { $arr[$i]='musual'; } $arr[$itm]='mchecked'; print << function realdel() { if(window.confirm("Вы действительно желаете удалить этот скрипт?")) location.href="?mnu=4"; else return false; }
Меню
Инфо
Посчитать контрольные суммы
Сравнить контрольные суммы
Выйти из системы
Удалить скрипт
©DX 2008
HERE; } function redir($msg,$to='',$foot=1,$lvl=1,$obcln=1) { global $ver; if($obcln) { @ob_end_clean(); @ob_start(); print << Site File Checker $ver HERE; } $tm=3000; if(!$to) { $lnk='#'; $act="javascript:history.go(-$lvl);"; $scr="history.go(-$lvl);"; } else { $lnk=$to; $act=''; $scr="location.href='$to';"; } print <<
Подождите, сейчас Вы будете перемещены...
$msg
Если не хотите ждать, нажмите сюда
HERE; if($foot) die(''); } ?>