A menos que o aplicativo da Web inclua informações sobre o nome de usuário no redirecionamento (digamos, na string de consulta /loginfiled.php?username=foobar
ou em um cookie), não haverá maneira de extrair o nome de usuário da solicitação /loginfailed.php
. A informação simplesmente não está lá para extrair. HTTP é stateless, portanto, quando um cliente envia username=foo
no corpo de uma solicitação POST e isso resulta em um redirecionado 302, a solicitação de acompanhamento para /loginfailed.php
não sabe nada sobre a solicitação anterior.
Se este aplicativo da web usar um redirecionamento 307 em vez de um 302 ou um 303, a solicitação de acompanhamento para /loginfailed.php
será uma solicitação POST com todos os mesmos dados. Eu esperaria que isso fosse bastante improvável.
Dê uma olhada nos cookies ou no armazenamento da sessão e veja se o nome de usuário está lá. (Eu não tenho certeza se mod_security
pode ler o armazenamento da sessão, mas se você sabe que está lá, tenho certeza que você pode descobrir algo.)
Você pode ter mais sorte com um CustomLog
para registrar se a tentativa de login foi bem-sucedida ou falhou durante a solicitação original em vez da solicitação de acompanhamento:
LogFormat "%h %t \"%r\" %>s %{Location}o %{PHPSESSID}C %{UNIQUE_ID}e" loginslog
CustomLog "/var/log/apache2/logins.log" loginslog
ou você pode adicionar o cabeçalho Location:
e a ID exclusiva a seus registros normais com %{Location}o %{UNIQUE_ID}e
. mod_security
inclui o ID exclusivo em todos os seus registros para que você possa corresponder facilmente ao outro.
A criação de um log coerente de todos os nomes de usuários que falharam nos logins é uma questão de transferir todas as Location:.*/loginfailed.php
linhas do logins.log
e, em seguida, corresponder os IDs exclusivos até os nomes de usuários no seu log existente baseado no mod_security.