Encontrando o usuário atual autenticado por autenticação básica (Apache)

Encontrando o usuário atual autenticado por autenticação básica (Apache)

Quando você faz login por meio de uma página de autenticação básica, o nome de usuário que você autenticou está armazenado em algum lugar (no servidor ou na máquina cliente), talvez em uma variável de ambiente?

Fundo: Tenho uma página de administração web comum para um servidor de e-mail e gostaria de saber quem está fazendo o quê. Quando um usuário faz login com sucesso por meio de autenticação básica, de alguma forma quero ser capaz de identificá-lo e registrar suas ações. Assim, cada vez que uma solicitação é enviada, posso gravar em um arquivo de log. O formato básico seria:

$username ran a $function against $useraccount

então, se um usuário alterou as permissões de alguém, por exemplo:

Admin-Bob ran a permission change against User-Scott

Portanto, se ocorrerem erros, posso rastrear facilmente no arquivo de log quais ações levaram à causa. Tentei verificar o %ENVhash sem sucesso, alguma ideia?

Eu realmente não quero entrar em sessões do tipo PHP, porque isso significaria descartar minha autenticação básica, o que já me dá um bom grau de controle. Se eu tiver que codificar algo com sessões, precisarei implementar um sistema para bloquear usuários após o máximo de tentativas e assim por diante, o que realmente não quero codificar. Eu acho que isso é mais adequado para serverfault porque se refere mais ao Apache do que à linguagem de programação. As sessões podem ser realizadas em vários idiomas.

Responder1

O nome de usuário estará disponível na variável de ambiente REMOTE_USER.

Isso funciona para quase todos os métodos de autenticação, caso você comece a usar o resumo ou talvez até mesmo a autenticação Kerberos.

Responder2

Shtééf já mencionou $ENV{'REMOTE_USER'}, mas se você estiver usando CGI.pm, também será retornado pela remote_user()função.

my $cgi = CGI->new();
print $cgi->remote_user(); # Prints user name

Responder3

Na verdade, é uma variável de servidor, não de ambiente.

PHP_AUTH_USER e AUTH_USER devem funcionar.

informação relacionada