Мне нужно проверить полезную нагрузку POST для определенного веб-сайта (сервер довольно занят, и я бы не стал включать ведение журнала POST для всего сервера).
Сервер LiteSpeed 5.0.7. SecRequestBodyAccess установлен на «Вкл».
Сначала я попробовал с цепочкой правил: первое в фазе: 1, чтобы соответствовать только запросам для моего желаемого хоста, но полезная нагрузка поста находится в фазе: 2, и я не думаю, что могу сделать цепочку в 2 разных фазы.
Затем я попытался использовать это:
SecRule REQUEST_METHOD "POST" "этап: 2, журнал, идентификатор: 22222223
Но он ничего не записывает в modsec_audit.log.
Я что-то делаю не так или это связано с совместимостью LiteSpeed с ModSec?
В конце концов, я также попробовал это правило для записи POST для всех запросов: SecRule REQUEST_METHOD «POST» «id: 22222224, phase: 2, ctl: auditEngine = On, log, pass».
Он регистрирует запрос, но не тело запроса (-C-- group si отсутствует в аудите modsec).
Подобно этому вопросу: Как заставить mod_security регистрировать все данные POST?
Вы правы, вы не можете объединить два правила в две разные фазы, однако фаза 2 имеет доступ ко всей информации фазы 1, поэтому просто переместите ее на фазу 2, если вы хотите сделать это таким образом.
Это правило, которое вы дали:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
Это вроде бессмысленно. Это будет регистрировать (в основном журнале), что запрос POST был получен, но без тела POST.
Он также войдет в AuditEngine в зависимости от того, что вы SecAuditEngine установлено значение:
Обычно лучше установить для SecAuditEngine значение RelevantOnly (что, как я подозреваю, у вас уже установлено), но если это не установлено, то тело может не регистрироваться в AuditLog
Возможно, лучший способ сделать это - использовать другое правило, которое вы указали, используя ctl действие:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
Это заставляет AuditEngine быть включенным для почтовых запросов, даже если AuditLog отключен. Это также будет записывать, что вы активировали это правило, чтобы включить его, что на самом деле не нужно или полезно, поэтому я бы изменил "журнал" на "nolog". Запрос по-прежнему будет регистрироваться (поскольку для параметра auditEngine установлено значение yes), но это правило не вносит изменения. Кстати, когда вы используете ctl, это влияет только на этот запрос, поэтому AuditEngine будет сброшен для следующего запроса.
Как вы утверждаете, это работает, за исключением того, что у вас нет части C. Это установлено с SecAuditLogParts. По умолчанию это включает части C, так что угадайте, это означает, что вы должны были изменить значение по умолчанию? Была ли для этого причина?
В любом случае вы можете установить это, чтобы включить части C:
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
Или, если вы хотите, чтобы при срабатывании этого правила регистрировались только части C, вы можете сделать это как часть правила:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
Еще нужно знать, что запросы POST могут регистрировать конфиденциальные данные (пароли, номера кредитных карт, номера социального страхования и т. Д.). Их ведение не рекомендуется, и это также может нарушить политику компании и / или любые стандарты, которым вы следуете (например, соответствие требованиям PCI). Поэтому рекомендуется настроить правила очистки, чтобы скрыть эти данные. См. Здесь для получения дополнительной информации: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg
Убедитесь в следующем:
Есть SecRequestBodyAccess On
Попробуйте использовать "auditlog" вместо "log"
Если вы настроили SecAuditLogParts, убедитесь, что он включает тело запроса.