Логирование POST запросов к сайту

Довольно часто возникают ситуации, когда обычных логов, которые пишет вебсервер apache бывает недостаточно. Например ваш сайт взломали, и вы изучаете логи вебсервера с целью находжения дыры в вашем сайте. Если точное время взлома известно, то скорее всего в логах вы найдёте скрипт или файл, к которому обращались с POST запросом. Да, это будет именно POST запрос. Но беда в том, что вы увидите в логах только файл, а вот что именно ему передали, видно к сожалению не будет. Да и точное время взлома довольно редко известно, поэтому обычно найти дыру на сайте, через которую его взломали, очень непросто.

Поэтому мы предлагаем использовать на вашем сайте небольшой скрипт, задачей которого и будет логирование именно POST запросов. В логе будет подробная информация о том кто, когда, куда и что передал методом POST. Даже не зная примерного времени взлома, заглянув в этот файл лога, вы без труда найдёте в нём информацию о дыре в вашем сайте.

ПОЛЕЗНО  Функция удаления директории с вложеными в нее файлами

Скрипт можно использовать абсолютно на любом сайте, построенном на любом движке и практически на любом хостинге.

Сам скрипт выглядит так:

<?php
if(isset($_POST) && count($_POST)>0){
        $data="";
        foreach($_POST as $key=>$val){
                if(is_string($val) && strlen($val)>2000 )
                        $val=substr($val,0,2000);
                $data.=$key."=>".$val."\n";
        }
        //вместо /home/user/data/www/site.ru/ указываем свой путь от корня сервера, куда должен писаться лог
        $fp=fopen("/home/post-logs/".$_SERVER['HTTP_HOST']."--".date("Ymd").".log","a");
        fwrite($fp,date("Y-m-d H:i:s")." ".$_SERVER['REMOTE_ADDR']." ".$_SERVER['SCRIPT_FILENAME']."\n".$data."---------------------------\n");
        fclose($fp);
        $data="";
        reset($_POST);
}
?>

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

Далее необходимо в файле .htaccess (если его нет, то можно создать) прописать такую строку:

php_value auto_prepend_file /home/user/data/www/site.ru/log.php

где естественно, изменить путь и название файла на своё собственное.

ПОЛЕЗНО  Получаем анимированую картинку из видео

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

ВНИМАНИЕ! Файл лога ни в коем случае не пишите в корень вашего сайта. В логе будут содержаться логины и пароли пользователей, которые они будут вводить при авторизации на вашем сайте, и в том числе и ваши логины\пароли, которые попадут в него при вашей авторизации в админке сайта (ведь это тоже передаётся POST запросом). Поэтому файл лога лучше всего писать в директорию, не доступную из веба, то есть например, в ту, которая находится выше корневой директории вашего сайта.

источник

  • Serg

    А как лигоровать POST запросы не ко всему сайту, а к отдельному файле на сайте, к примеру к filename.php ?

    • Roman NMSK

      Достаточно полученный php-файл-логгер прописать внутри нужного вам файла (в начале) через require_once или include