Segurança: Autenticando o PHP com HTTP (Authentication Required)

Um dos modos muito seguros para fazer autenticação de usuário em uma área restrita é usando a autenticação HTTP. Essa autenticação só é possível para os PHPs que estão compilados como módulos do Apache. Aqui vamos ver as vantagens e os perigos deste tipo de autenticação.

[ Hits: 30.311 ]

Por: leo genilhu em 15/03/2006


Analisando o código



Analisando o código acima:
Na primeira linha verificamos se a variável do array $_SERVER existe, caso ela não exista, enviamos ao servidor web a requisição da função header(). Nesta função é muito importante observamos o parâmetro utilizado.

'WWW-Authenticate: Basic realm="Minha intranet"'.

Somente autenticação "Basic" (Básica) é suportada. O realm define a mensagem de texto que será enviada a caixa de dialogo.

Caso a variável exista, é sinal que o cliente já está autenticado e pode navegar na intranet.

Bom, esta autenticação pode ser levada em conta numa validação em banco de dados, arquivo texto ou ainda qualquer outra forma de comparar os dados enviados pelo cliente.

Configuração


O PHP usa a presença de uma diretiva chamada AuthType para determinar se autenticação externa está em efeito ou não nas próximas transações entre o cliente e o servidor. No entanto, aqui existe um perigo que deve ser tratado, pois a diretiva citada não previne que alguém que controle uma URL não autenticada venha roubar senhas de URLs autenticadas no mesmo servidor.

Tanto o Netscape Navigator quanto o Internet Explorer já trazem por padrão a limpeza de autenticação da janela do navegador para o realm após receber uma resposta 401 do servidor. Isso pode efetivamente "deslogar" um usuário, forçando o mesmo a reentrar seu nome de usuário e senha. Algumas pessoas usam isso para delimitar o tempo de um login ou fazer um botão de "log-out".

Porém outros browsers não tratam essa de forma tão limpa, como por exemplo o navegador de texto do Linux Lynx. Aí deve se forçar o logout através de script para garantir a segurança.

Uma outra limitação é se você estiver usando o módulo IIS (ISAPI). Aí você não deve usar as variáveis PHP_AUTH_*, mas sim a variável HTTP_AUTHORIZATION.

Por exemplo, considere o seguinte código:

list($user, $pw) = explode(':',base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
Página anterior     Próxima página

Páginas do artigo
   1. Segurança: Autenticando o PHP com HTTP (Authentication Required)
   2. Analisando o código
   3. Informações importantes
Outros artigos deste autor

PHP: Programando com segurança

Fazendo sua conexão remota por SSH mais segura

Criando backup do MySQL com o mysqldump

Sistema de identificação em rede (NIS)

Leitura recomendada

Pentesting on PHP apps: XSS

Criptografia do método GET no PHP

Dicas básicas de segurança no PHP

Autenticação de sites com PHP e MySQL

Dados sensíveis em arquivos com extensão .inc

  
Comentários
[1] Comentário enviado por femars em 04/09/2008 - 19:44h

olha, opnião minha mas, uma coisa é pesquisar numa fonte outra e copiar exatamente da fonte... tá exatamente igual no manual do php http://docs.php.net/manual/pt_BR/features.http-auth.php


Contribuir com comentário