Логирование запросов в htaccess. Логирование POST-запросов и GET-Запросов

8 Февраля 2019

Как все мы знаем, HTTP-запросы бывают двух типов – GET и POST. С логированием GET-запросов проблем никаких не возникает – все такие запросы заносятся в файл access.log. А вот что с POST-запросами? Как мы узнаем, какой пользователь обращался с помощью POST к нашим сценариям? В этом нам поможет модуль modsecurity. Также будет показан способ без изменения конфигурации сервера.

1.jpg

Использование modsecurity

Возможности modsecurity довольно большие, но нас интересует сейчас только логирование POST-запросов, на этом и остановимся.

Установите modsecurity:

sudo apt install libapache2-modsecurity

Скопируйте файл конфигурации с рекомендуемыми параметрами, чтобы использовать его в качестве основного файла конфигурации:

cd /etc/modsecurity/
sudo cp modsecurity.conf-recomended modsecurity.conf

Откройте файл /etc/modsecurity/modsecurity.conf для редактирования:

sudo mcedit /etc/modsecurity/modsecurity.conf

Добавьте в него следующие строки:

SecRequestBodyAccess On

SecRule REQUEST_METHOD "POST" "id:200012,phase:2,ctl:auditEngine=On,log,pass"

При желании вы можете настроить и другие параметры этого модуля – обратитесь к документации (вы без проблем найдете ее в Интернете).

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Перезапустим Apache:

sudo service apache2 restart

Файл журнала modsecurity называется /var/log/apache2/modsec_audit.log.

Если на сервере «крутится»" несколько сайтов, то соответствующую настройку можно произвести для каждого отдельного виртуального узла. Откройте файл конфигурации виртуального узла и добавьте строки:

  <IfModule security2_module>
        SecAuditLog /var/log/apache2/audit_example_com.log
        SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
        SecRuleEngine On
</IfModule>

Здесь мы не только включаем логирование POST-запросов, но и указываем файл конфигурации.

Логирование запросов с помощью PHP-сценария

Совсем другое дело, если мы не можем редактировать конфигурацию сервера, то есть у нас есть обычный хостинг, а логировать запросы к сайту нужно. В этом случае поможет следующий PHP-сценарий (postlog.php):

<?php
if(isset($_POST) && count($_POST)>0){
        $data="";
        // собираем POST-данные, если они вообще есть
        foreach($_POST as $key=>$val){
                if(is_string($val) && strlen($val)>2000 )
                        $val=substr($val,0,2000);
                $data.=$key."=>".$val."\n";
        }
        // вместо /home/example.com/ указываем свой путь от
// корня сервера, куда должен писаться лог
        $fp=fopen("/home/example.com/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);
}
?>

Теперь нужно сделать так, чтобы этот файл присоединялся к каждому выполняемому PH-сценарию. Для этого редактируем .htaccess и добавляем в него строку:

php_value auto_prepend_file /home/example.com/postlog.php

Путь к сценарию нужно указать полный – от корня сервера. На этом все. Мы показали два способа логирования POST-запросов, надеемся, статья будет для вас полезной.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent