Бывают ситуации, когда требуется сохранить в лог содержимое $_POST
(переменную POST запроса). Например, когда злоумышленник отправляет
команды в файл, запрятанный на сайте, или при атаке большим количеством запросов POST,
чтобы не только понять на какой адрес проходит атака (эту информацию
можно получить из стандартных LOG-файлов web-сервера), но и какие данные
используются.
Теперь маленькая хитрость, которая заключается в том, что все запросы, которые приходят на сервер нужно пропустить через этот файл. Для этого как нельзя кстати подходит директива PHP-ini auto_prepend_file , которую можно подключить используя следующий код (вставляем в .htaccess, путь для надёжности указываем полный):
В Apache2 есть упрощённый аналог исключительно для сохранения Post данных mod_log_post
mod_dumpio в Apache 2 также позволяет сохранять нужные данные http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html
Логирование POST-запросов при помощи PHP
Наиболее доступный (в том смысле, что не требует правки конфигурационных файлов веб-сервера) способ сохранения информации о содержимом переменных POST - сохранение переменной $_POST примерно следующим кодом: // lev_save_post.php
$filename = dirname(__FILE__).’/log-post.txt’;
if (!empty($_POST)) {
$dh = fopen ($filename,’a+’);
fwrite($dh, var_export($_POST,true));
fclose($dh);
}
Теперь маленькая хитрость, которая заключается в том, что все запросы, которые приходят на сервер нужно пропустить через этот файл. Для этого как нельзя кстати подходит директива PHP-ini auto_prepend_file , которую можно подключить используя следующий код (вставляем в .htaccess, путь для надёжности указываем полный):
# .htaccess в корне добавим следующую строку
php_value auto_prepend_file /home/user/www/lev_save_post.php
Логирование POST запросов через Nginx
Для настройки логирования POST-запросов при помощи nginx следует добавить в нужный location следующие строкиlog_format logpost $request_body;
access_log /var/log/nginx/post.log logpost;
Логирование POST запросов в Apache
Для логирования POST запросов в Apache 1 можно использовать mod_security.
SecAuditEngine On
# тип логирования Concurrent или
SecAuditLogType Concurrent
# путь к индексу
SecAuditLog /var/log/apache-post/index
# Каталог для запросов
# запросы сохраняются во вложенных каталогах день/транзакция
SecAuditLogStorageDir /var/log/apache-post/data
# логирование всех данных
SecAuditLogParts ABCDEFGHZ
# Используем POST данных.
SecFilterScanPOST On
SecFilterEngine On
# сохраняем загруженные файлы
SecUploadDir /var/log/apache-post/files
SecUploadKeepFiles On
В Apache2 есть упрощённый аналог исключительно для сохранения Post данных mod_log_post
mod_dumpio в Apache 2 также позволяет сохранять нужные данные http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html
# Dump all input data to the error log
DumpIOInput On
DumpIOLogLevel debug
Источник: Заметки Лёвика