Блог старого компьютера

Блог старого компьютера


Главная PHP Свои логи с помощью auto_prepend_file

Свои логи с помощью auto_prepend_file

19.01.2014 07:01 Администратор PHP
Печать PDF

После нескольких взломов хостинга клиентов пришлось задуматься об своем логе в который бы писались все post, get запросы, само собой время в которое данный запрос был сделан и вообще все что нам необходимо, благодаря такому логу можно обнаружить через что и когда произошел взлом, и принять меры закры дыру в скрипте. Так же предолагалось в таком файле сделать свой антивирус, который бы останавливал выполнение скрипта и выдавал ошибку "Forbidden"  при определенном запросе (например если пользователь в адресную строку бразуера добавил одинарную кавычку). Многие я думаю скажут, а зачем это нужно ведь сейчас на любом хостинге есть логи которые можно посмотреть. Совершенно верно, но почему то в этих логах тогда когда надо, было либо пусто, либо они писались всего за сутки и выявить причину не удавалось.

Задумавшись о том как сделать подобное я вспомнил о настроке auto_prepend_file в php.ini. Указанный файл в этой настроке обрабатывается до выполнения всех php сриптов, а следовательно срабатывает первый и делает нужные действия, в нашем случае сбор информации в логи, и при встрече определенного слова остановку выполнения дальнейших сценариев.

Для того чтоб данную возможность использовать необходимо в файле php.ini выполнить поиск по словам auto_prepend_file и в найденов строке вписать адрес до скрипта логирования (при внесении изменений в файл php.ini проконсультируйтесь с вашим хостером, возможно он не предоставляет такой возможности, либо предосталвяет возможность создания в корне локального php.ini):

auto_prepend_file = "/home/www/welos/prepend.php"

Держать данный файл в коне сайта не советую лучше его вынести на уровень ниже, и соотвественно там и будут создаваться отчеты с порядковым номером месяца. К примеру так "log12" что будет означать что это лог за 12 месяц (декабрь).

Далее приведу код файла prepend.php который будет вормировать логи:

preg_match('/\/home\/(.*?)\/public/i', $_SERVER['SCRIPT_FILENAME'], $account); // возможно придется внести изменения
$url ="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$ip = $_SERVER['REMOTE_ADDR'];
$data = date("h:i:s d.m.y", $_SERVER['REQUEST_TIME']);
$mounth = date("m",$_SERVER['REQUEST_TIME']);
$redirect = $_SERVER['REDIRECT_URL'];
$agent = $_SERVER['HTTP_USER_AGENT'];
if(isset($_POST) && count($_POST)>0){
$post="";
foreach($_POST as $key=>$val){
$post.=$key."=>".$val.".,";
}
}
if(isset($_FILES) && count($_FILES)>0){
$file="";
foreach($_FILES as $key=>$val){
$file.=$key."=>".$val['name'][0].".,";
}
}
$string = $data."|".$url."|".$redirect."|".$ip."|".$agent."|".$post."|".$file;
if($fp=fopen("/home/".$account[1]."/log".$mounth, "a+")){ // возможно придется внести изменения
fwrite($fp, $string."\n");
fclose($fp);
}
$stop_array=array("'");
$str = str_replace($stop_array, "", $url, $count);
if($count!=0){
die('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don\'t have permission to access '.((!empty($_SERVER['SCRIPT_NAME']))?$_SERVER['SCRIPT_NAME']:'this page').' on this server.</p>
<hr>
<address>'.$_SERVER['SERVER_SIGNATURE'].'</address>
</body></html>');

 Вот такой вот скрипт. Скрипт собирает отчет о дате, урле, откуда пришел человек, ip адрес, юзерагент, пост запросы, загруженные файлы.

В скрипте присутствует массив $stop_array=array("'"); в котором через запятую прописываются стоп слова при нахождении которых в урле запроса скрипт останавливает дальнейшее выполнение сценариев.

 В скрипте я указал 2 комментария, эти строки возможно придется изменить в зависимости от пути до вашего акканта на хостинге.

К сожалению на хостинге где я раньше использовал данный скрипт сбора логов запретили изменение php.ini, сейчас чтоб поменять его настройки нужно плясать с бубном и добавлять в определеные папки и файлы различные строки, после этих плясок я смогу использовать свой скрипт.

Добавить комментарий


Защитный код
Обновить

Поиск

Голосование

Что Вы думаете на счет битрикса?
 

Все материалы раздела