Semelhante a esta pergunta: Como obter o mod_security para registrar todos os dados do POST?
Você está correto, você não pode encadear duas regras em duas fases diferentes, no entanto, a fase 2 tem acesso a todas as informações da fase 1, basta movê-lo para a fase 2, se você quiser fazer isso desta maneira.
Esta regra que você deu:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
É meio sem sentido. Isso irá registrar (no log principal) que uma solicitação POST foi recebida, mas sem o corpo POST.
Ele também fará o login no AuditEngine, dependendo de qual é o valor do SecAuditEngine definido como:
- Se você tiver o SecAuditEngine configurado como On, tudo será registrado no log de auditoria e a regra acima não será necessária. Isso preenche os arquivos de log rapidamente, por isso não é recomendado.
- Se você tiver o SecAuditEngine definido como RelevantOnly, ele também será registrado aqui.
- Se o SecAuditEngine estiver desativado, ele nunca será registrado no log de auditoria.
Geralmente, é melhor ter o SecAuditEngine definido como RelevantOnly (que eu suspeito que você já tenha), mas se isso não for definido para isso, o corpo pode não estar logado no AuditLog
Talvez a melhor maneira de fazer isso seja com a outra regra que você deu usando a ação ctl :
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
Isso força o Mecanismo de Auditoria a estar ativo para solicitações de postagem - mesmo que o AuditLog esteja definido como Desativado. Isso também irá registrar que você disparou essa regra para transformá-la no que não é realmente necessário ou útil, então altero o "log" para "nolog". A solicitação ainda será registrada (como o auditEngine foi definido como sim), mas essa regra não fará isso. BTW quando você usa o ctl, isso afeta somente essa solicitação, portanto, o AuditEngine retornará para a próxima solicitação.
Conforme você afirma, parece funcionar, exceto que você não tem a parte C. Isso é definido com SecAuditLogParts . Por padrão, isso inclui partes C, então acho que isso significa que você deve ter alterado o padrão? Houve algum motivo para isso?
De qualquer forma, você pode definir isso para incluir partes C:
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
Ou, se você quiser que apenas as partes C sejam registradas quando essa regra for disparada, você poderá fazer isso como parte da regra:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
A outra coisa a ter em conta é que as solicitações POST podem registrar dados confidenciais (senhas, números de cartão de crédito, números de seguridade social ... Etc). O registro desses dados não é aconselhável e também pode violar a política da empresa e / ou quaisquer padrões que você esteja seguindo (por exemplo, conformidade com o PCI). Portanto, é recomendável configurar regras de higienização para mascarar esses dados. Veja aqui para mais informações: link