Segurança: Autenticando o PHP com HTTP (Authentication Required)
Analizando 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.
<u>'WWW-Authenticate: Basic realm="Minha intranet"'.</u>
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 é que o cliente já está autenticado e pode navegar na intranet.
Esta autenticação pode ser levada em conta uma validação em banco de dados ou 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 de 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 re-entrar 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 browser não tratam essa limpa como por exemplo o navegador de texto do linux Lynx. Ai deve se forçar o log-out através de script para garantir a segurança.
Uma outra limitação é se você estiver usando o módulo IIS (ISAPI). Ai você não deve usar as variáveis PHP_AUTH_* mas sim, a variável HTTP_AUTHORIZATION.
Por exemplo, considere o seguinte código:
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.
<u>'WWW-Authenticate: Basic realm="Minha intranet"'.</u>
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 é que o cliente já está autenticado e pode navegar na intranet.
Esta autenticação pode ser levada em conta uma validação em banco de dados ou 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 de 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 re-entrar 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 browser não tratam essa limpa como por exemplo o navegador de texto do linux Lynx. Ai deve se forçar o log-out através de script para garantir a segurança.
Uma outra limitação é se você estiver usando o módulo IIS (ISAPI). Ai 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)));
Ola Clrgomes,
para fazer um logou vc nao precisar necessariamente fechar o browser, na verdada por esse caminha vc nunca garantira segurança na aplicação. A forma correta eh apagar a sessão que esta sendo usada para autenticação.
um abraço
para fazer um logou vc nao precisar necessariamente fechar o browser, na verdada por esse caminha vc nunca garantira segurança na aplicação. A forma correta eh apagar a sessão que esta sendo usada para autenticação.
um abraço
03/02/2006 6:24am
(~19 anos atrás)
Legal, mas gostaria de criar um logout sem fechar o navegador, como posso fazer isso?
Cassio
Cassio
01/02/2006 8:38am
(~19 anos atrás)
Como posso fazer um codigo para LOGOUT neste codigo exibido.
Obrigado
CLRGomes
Obrigado
CLRGomes
19/01/2006 4:02am
(~19 anos atrás)
mto bom simplificou em vez de termos que ficar botando essas configs no apache é só por no php e ja era =D, valeu cara mto bom
17/01/2006 5:03pm
(~19 anos atrás)
eu tb tava kerendo saber como faz isso! eu keria autenticar atraves da pag principal sem temq aparecer akela janelinha!
14/01/2006 2:42am
(~19 anos atrás)
..blz, mas de posse dos dados como passo eles para o servidor http (apache) para que ele não requisite o login exibindo a janelinha?
09/01/2006 11:10am
(~19 anos atrás)
Ola asclows,
Voce pode usar o PHP para ler os arquivo .password e autenticar os seus usuarios.
um Abraço
Voce pode usar o PHP para ler os arquivo .password e autenticar os seus usuarios.
um Abraço
06/01/2006 5:56am
(~19 anos atrás)
Por exemplo, tenho uma pasta está protegida por senha (permissões no arquivo .htaccess) e gostaria de aproveitar os dados de login do usuário que já estão gravadas em uma sessão php para autenticar o acesso à pasta ao invés de lançar a tela de login do browser que é exibida quando a pasta é protegida.
Não sei se expliquei direito, mas é simples, ao invés de requisitar a autenticação pra acessar os arquivos do diretório, o acesso será liberado pq o php repassará os dados da sessão do usuário e a autenticação para a pasta protegida será transparente ao usuário.
Tem jeito?
Não sei se expliquei direito, mas é simples, ao invés de requisitar a autenticação pra acessar os arquivos do diretório, o acesso será liberado pq o php repassará os dados da sessão do usuário e a autenticação para a pasta protegida será transparente ao usuário.
Tem jeito?
05/01/2006 10:46am
(~19 anos atrás)
Abraço.