|
Постоянный
Регистрация: 21.08.2007
Сообщений: 367
Провел на форуме: 3578960
Репутация:
468
|
|
4 Nightmarе.
Делать было нечего, сделал
Скрипт пользуеца мускулом, предварительно ему нужны данные для доступа.
Он делает слепок директории и заносит в базу, делая мд5 и определяя размер файлов и директоии.
При проверке эти данные сверяются, если что-то не совпадает то в корне контролируемой директоии создается
.htaccess блокирующий файл для всех (кто хочет может поменять на локалхост) и высылает репорт админу.
Код:
<?php
$server = 'localhost'; //хост
$username = 'anti_change'; //юзер мускула
$password = 'password'; //пароль мускула
$database = 'anti_change'; //база мускула
$path = 'C:/TopServer/home/localhost/wordpress'; //реальный путь к контролируемой директории
$mail_to = 'admin@localhost'; //кому писать репорт
$mail_from = 'axtung@localhost'; //от кого
$mail_subj = 'axtung!!!'; //тема письма
mysql_connect($server, $username, $password);
mysql_select_db($database);
function scan_dir($dirname)
{
GLOBAL $text, $retext;
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false)
{
if($file != "." && $file != "..")
{
if(is_file($dirname."/".$file))
{
$sql = "INSERT INTO `first_scan` (`category`, `name`, `md5_file`, `size`) VALUES ('file', '".$dirname."/".$file."', '".md5_file($dirname.'/'.$file)."', '".filesize($dirname.'/'.$file)."')";
mysql_query($sql);
}
if(is_dir($dirname."/".$file))
{
$sql = "INSERT INTO `first_scan` (`category`, `name`, `md5_file`, `size`) VALUES ('directory', '".$dirname."/".$file."', '---', '".disk_total_space($dirname."/".$file)."')";
mysql_query($sql);
scan_dir($dirname."/".$file);
}
}
}
closedir($dir);
}
function check_dir($dirname)
{
GLOBAL $text, $retext;
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false)
{
if($file != "." && $file != "..")
{
if(is_file($dirname."/".$file))
{
$sql = "SELECT * FROM `first_scan` WHERE `name` = '".$dirname."/".$file."' and `category` = 'file'";
$result_file = mysql_query($sql);
$array_file = mysql_fetch_array($result_file);
if ($array_file)
{
if ($array_file['md5_file'] != md5_file($dirname.'/'.$file))
{
$sql_md5 = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('error md5_file', '".$dirname."/".$file." error checksum')";
$res=mysql_query($sql_md5);
}
if ($array_file['size'] != filesize($dirname.'/'.$file))
{
$sql_size = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('error size file', '".$dirname."/".$file." error size file')";
mysql_query($sql_size);
}
}
else
{
$sql_nf = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('file not found', '".$dirname."/".$file." file not found')";
mysql_query($sql_nf);
}
}
if (is_dir($dirname."/".$file))
{
$sql = "SELECT * FROM `first_scan` WHERE `name` = '".$dirname."/".$file."' and `category` = 'directory'";
$result_dir = mysql_query($sql);
$array_dir = mysql_fetch_array($result_dir);
if ($array_dir)
{
if ($array_dir['size'] != disk_total_space($dirname."/".$file))
{
$sql_size = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('error size directory', '".$dirname." error size directory')";
mysql_query($sql_size);
}
}
else
{
$sql_nf = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('directory not found', '".$dirname."/".$file." directory not found')";
mysql_query($sql_nf);
}
check_dir($dirname."/".$file);
}
}
}
closedir($dir);
}
function check_del()
{
$sql = "SELECT * FROM `first_scan`";
$result = mysql_query($sql);
while ($array = mysql_fetch_array($result))
{
if (!is_dir($array['name']) && ($array['category'] == 'directory'))
{
$sql_del_dir = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('directory deleted', '".$array['name']." directory deleted')";
mysql_query($sql_del_dir);
}
if (!file_exists($array['name']) && ($array['category'] == 'file'))
{
$sql_del_file = "INSERT INTO `axtung!` (`category_error`, `description`) VALUES ('file deleted', '".$array['name']." file deleted')";
mysql_query($sql_del_file);
}
}
}
if (isset($action) && ($action == 'first'))
{
mysql_query("DROP TABLE `axtung!`");
mysql_query("CREATE TABLE `axtung!` (
`id` int(11) NOT NULL auto_increment,
`category_error` text,
`description` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1");
mysql_query("DROP TABLE `first_scan`");
mysql_query("CREATE TABLE `first_scan` (
`id` int(10) NOT NULL auto_increment,
`category` text NOT NULL,
`name` text NOT NULL,
`md5_file` text NOT NULL,
`size` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=501;
");
scan_dir($path);
echo 'слепок сделан';
}
if (isset($action) && ($action == 'check'))
{
check_dir($path);
check_del();
$mail = '';
$report = '';
$sql_mail = "SELECT * FROM `axtung!`";
$result = mysql_query($sql_mail);
while ($array = mysql_fetch_array($result))
{
$mail .= $array['description']."\n";
$report .= $array['description']."<br>";
}
if (!empty($mail))
{
$fh = fopen ('C:/TopServer/home/localhost/wordpress/.htaccess', "w");
fwrite($fh, "\n"."deny from all");
fclose ($fh);
mail('admin@localhost','axtung!',$mail,"From: axtung@localhost\r\n");
echo 'Ахтунг!!!<br>'.$report.'Внимание доступ к сайту закрыт!!!';
}
else
{
echo 'Все норм, спи спокойно';
}
}
if (isset($action) && ($action == 'clear_error'))
{
mysql_query('TRUNCATE `axtung!`');
echo 'лог очищен';
}
?>
<form action="<?=basename($PHP_SELF)?>?action=first" method="POST">
<input type="submit" value="создать слепок файловой системы">
</form>
<br>
<form action="<?=basename($PHP_SELF)?>?action=check" method="POST">
<input type="submit" value="проверить">
</form>
<br>
<form action="<?=basename($PHP_SELF)?>?action=clear_error" method="POST">
<input type="submit" value="очистить лог из базы">
</form>
Юзай на здоровье.
З.Ы. Просьба на корявости не обращать внимания, ибо писал ночью и особенной ценности скрипт для меня не представлял.
З.Ы.Талисману пасиба за реверсивный поиск, ибо самому было лень)
Последний раз редактировалось life_is_shit; 24.09.2007 в 05:25..
|