mod_security: rastreia o usuário para verificar se foi redirecionado para a página com falha de login

mod_security: rastreia o usuário para verificar se foi redirecionado para a página com falha de login

Tenho que fazer login quando um usuário não consegue fazer login em um aplicativo da web. Infelizmente, este aplicativo da web não é capaz de fazer isso imediatamente e não posso alterá-lo.

Agora estou experimentando mod_security. Minha idéia é rastrear a solicitação POST, extrair o nome de usuário e verificar se o usuário é redirecionado para a página "falha no login".

Eu tenho:

<Location /login.php>
       # Sanitize password variable value
       SecAction nolog,phase:2,sanitiseArg:password

       SecRule REQUEST_BODY "username=(.*)&password" "capture,log,logdata:'login submitted: user %{TX.1}'"
</Location>

e

<Location /loginfailed.php>
       # Filter und log redirects to loginfailed
       SecRule RESPONSE_BODY "loginfailed.php" "phase:4,t:none,log,logdata:'login failed: %{TX.1}'"
</Location>

Mas é claro que "TX.1" já está desativado quando preciso dele pela segunda vez.

Alguém pode me dar uma dica de como resolver isso?

Obrigado!

Responder1

A menos que o aplicativo web inclua informações sobre o nome de usuário no redirecionamento (por exemplo, na string de consulta /loginfiled.php?username=foobarou em um cookie), não haverá como extrair o nome de usuário da /loginfailed.phpsolicitação. A informação simplesmente não está lá para ser extraída. O HTTP não tem estado, portanto, quando um cliente envia username=fooo corpo de uma solicitação POST e isso resulta em um redirecionamento 302, a solicitação de acompanhamento não /loginfailed.phpsabe nada sobre a solicitação anterior.

Se este aplicativo da web usar um redirecionamento 307 em vez de 302 ou 303, a solicitação de acompanhamento /loginfailed.phpserá 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á. (Não tenho certeza se mod_securityé possível ler o armazenamento da sessão, mas se você sabe que ele está lá, tenho certeza de que pode descobrir algo.)

Você pode ter mais sorte registrando CustomLogse 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 simplesmente adicionar o Location:cabeçalho e o ID exclusivo aos seus logs normais com %{Location}o %{UNIQUE_ID}e. mod_securityinclui o ID exclusivo em todos os seus logs para que você possa combinar facilmente com os outros.

Criar um log coerente de todos os nomes de usuário que tiveram logins com falha é então uma questão de extrair todas as Location:.*/loginfailed.phplinhas logins.loge, em seguida, combinar os IDs exclusivos com os nomes de usuário em seu log existente baseado em mod_security.

informação relacionada