Файл: sys/core/protect_shell.php
Строк: 97
<?
/*
Для отладки
$set['antihah_files_format'] = 0;
$set['antihack'] = 1;
$set['antihah_upload_intansiv'] = 1;
$set['antihah_upload_msg'] = 1;
$set['antihah_upload_ban'] = 0;
$set['antihah_upload_ban_ip'] = 0;
$set['antihah_upload_ban_time'] = 86400;
*/
if ($set['antihack'] == 1)
{
//опасные значения (угрозы)
$shell_arr = array(
"ini_get('safe_mode')",
"eval",
"gzinflate",
"base64_decode",
"rootshell",
'phpinfo',
'rmdir',
'opendir',
'exec',
'system',
'shell',
'$_FILES',
'chmod',
'file_get_contents',
'copy',
'mail',
'mkdir',
'unlink',
'fopen',
'fclose',
'fputs',
'escapeshellarg',
'escapeshellcmd',
'passthru',
'proc_open',
'popen',
'shell_exec',
'include',
'include_once',
'require',
'require_once'
);
if (isset($_FILES) and $_FILES != null)
$Tmpfile = @$_FILES['file']['tmp_name'];
else $Tmpfile = null;
//тек. страница
$location = $_SERVER['REQUEST_URI'];
//файл где ищем исключения
$shell_dir = file_get_contents(H.'sys/dat/if_shell_dir.txt');
if (preg_match("#". $shell_dir."#i", $location))
$continue = true;
else
$continue = false;
if (file_exists($Tmpfile) AND $Tmpfile != null and $continue == null)
{
//проверяемый файл
$malicious_file = file_get_contents($Tmpfile);
//обявляем переменную
$attempts = 0;
//перебираем данные
foreach ($shell_arr as $key => $val)
{
if (preg_match("#". $val ."#i", $malicious_file))
//записываем угрозы
++$attempts;
}
//если угроза обнаружена
if($attempts > $set['antihah_upload_intansiv'])
{
if (isset($_SESSION['id_user']))
$user_ses = mysql_fetch_assoc(query("SELECT `id`,`nick` FROM `user` WHERE `id` = '".intval($_SESSION['id_user'])."' LIMIT 1"));
else
$user_ses = null;
//сообщаем
if ($set['antihah_upload_msg'] == 1)
{
$msg =
"[b]Анти-шелл[/b], возможно это попытка залить вредоносный шелл!
Атакуемая директория : [url={$location}]{$location}[/url]
Нарушитель : ".(@$user_ses['nick'] != null ? "[url=/id{$user_ses['id']}][color=red][b]{$user_ses['nick']}[/b][/color][/url]":'Гость')."
ip : ".($set['antihah_upload_ban_ip'] == 0 ? "[Забанить [url=".APANEL."/ban_ip.php?min={$ip}]{$ip}[/url]]":false);
query("INSERT INTO `jurnal_system` (`time` ,`type` ,`read` ,`id_user`,`msg`,`id_kont`)
VALUES ( '".time()."', 'system', '0', '{$user_ses['id']}','". my_esc($msg) ."','0');");
}
//баним
if ($set['antihah_upload_ban'] == 1 and isset($user_ses['nick']))
{
query("INSERT INTO `ban` SET `time`='".(time() + $set['antihah_upload_ban_time'])."', `prich` = 'За попытку загрузки Вредоносного файла !', `id_user` = '$user[id]',`id_ban`='0' ");
}
//баним по ip
if ($set['antihah_upload_ban_ip'] == 1)
{
$ip = my_esc($ip);
query("INSERT INTO `ban_ip` (`min`, `max`,`id_user`,`time`) values('{$ip}', '{$ip}', '0', '".time()."')");
}
//удаляем опасный файл
unlink($Tmpfile);
unset($_FILES);
//$_SESSION['message'] = 'Формат файла запрещен';
}
}
}
//банальная проверка
if (isset($_FILES) and $continue == null and $set['antihah_files_format'] == 1)
{
foreach ($_FILES as $fileArr => $Filter)
{
if (
strpos($_FILES[$fileArr]['name'], " ") !== FALSE or
strpos($_FILES[$fileArr]['name'], 0) !== FALSE or
strpos($_FILES[$fileArr]['name'], '/') !== FALSE or
stripos($_FILES[$fileArr]['name'], '.php') !== FALSE or
stripos($_FILES[$fileArr]['name'], '.phtml') !== FALSE or
stripos($_FILES[$fileArr]['name'], '.js') !== FALSE or
stripos($_FILES[$fileArr]['name'], '.htaccess') !== FALSE
)
{
unlink($Tmpfile);
unset($_FILES);
//$_SESSION['message'] = 'Формат файла запрещен';
}
}
}