Назад | Перейти на главную страницу

Какое правило я могу использовать в ModSecurity для регистрации полезной нагрузки POST для определенного сайта?

Мне нужно проверить полезную нагрузку 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 установлено значение:

  1. Если для параметра SecAuditEngine установлено значение «Вкл.», Тогда все регистрируется в журнале аудита, и указанное выше правило не требуется. Это быстро заполняет файлы журнала, поэтому не рекомендуется.
  2. Если для параметра SecAuditEngine установлено значение RelevantOnly, он также войдет сюда.
  3. Если для параметра 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

Убедитесь в следующем:

  1. Есть SecRequestBodyAccess On

  2. Попробуйте использовать "auditlog" вместо "log"

  3. Если вы настроили SecAuditLogParts, убедитесь, что он включает тело запроса.