Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

milaestrela

Autenticação por headers

Recommended Posts

Olá,

to usando o seguinte script pra autenticar uma página de administração, por headers:

 

<?php

 $login = 'admin';
 $senha = 'admin';

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {

   header('HTTP/1.1 401 Unauthorized');
   header('WWW-Authenticate: Basic realm="Área restrita!"');
   exit('Erro! Você deve entrar com um login e senha válidos para acessar a administração');
 }
?>

 

Só que eu coloco a senha certa, e ele volta para a tela do login, como se estivesse errada. Digito a senha errada várias vezes e só volta para a tela de login, não dá o erro.

Será que esse código não funciona com PHP 5? Alguém pode me dá um help?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesse trecho final:

  }
?>

 

coloque:

 

  }

echo 'ok';
exit;
?>

 

 

teste novamente inserindo a senha correta e veja o que acontece

Compartilhar este post


Link para o post
Compartilhar em outros sites

não mudou nada, continua voltando pra mesma tela de login

 

Descobri que pode ser da versão do php. Hospedei os mesmos arquivos em outro servidor e funcionaram perfeitamente.

A versão do php do que não funcionou é PHP Version 5.1.4. E a do que funcionou é PHP Version 5.2.17.

Mas o que será que devo mudar??

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que descreveu não há outro motivo mais lógico do que o problema ser algo relacionado a reescrita de url..

 

no script não há nenhum ponto de redirecionamento e as condicionais terminam com exit..

 

não faz sentido o script redirecionar..

 

por acho que o que pode estar acontecendo é algum conflito na url rewrite ou algo o tipo...

 

pode haver outras causas tb,,

 

 

 

apenas para confirmar, coloque o breakpoint mais acima

 

<?php

 $login = 'admin';
 $senha = 'admin';

echo '<br />' . PHP_EOL . time() . '<br />' . PHP_EOL . __LINE__ . ':' . __FILE__;
exit;

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {

   header('HTTP/1.1 401 Unauthorized');
   header('WWW-Authenticate: Basic realm="Área restrita!"');
   echo 'Erro! Você deve entrar com um login e senha válidos para acessar a administração';
   exit;
 }


echo 'ok';
exit;
?>

 

poste o que retorna, pois é muito inconsistente os seus relatos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que você nao fez os testes sugeridos de forma correta..

 

dentro desse pequeno trecho de código, não há nada que faça um redirect

 

agora com esse pqeueno breakpoint ficou mais claro que provavelmente não há um conflito em reescrita de url.. pode ser qe haja, mas pelo resultado acho que não..

 

 

Acho que você deve buscar a resposta por si mesmo.

Te passei um tipo de técnica usando breakpoint. Isso é usado para decobrir onde está a origem de um determinado problema.

 

A lógica é ir colocando breakpoint em locais específicos.

 

Por exemplo, pedi para você colocar mais para cima.

O script executou e não ocorreu aquele erro de redirecionamento.

Por dedução lógica, se não ocorreu o mesmo erro, qual o próximo passo?

 

Coloque o breakpoint nas linhas mais para baixo..

 

<?php

 $login = 'admin';
 $senha = 'admin';

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||


echo '<br />INSIDE IF' . PHP_EOL . time() . '<br />' . PHP_EOL . __LINE__ . ':' . __FILE__;

   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {

   header('HTTP/1.1 401 Unauthorized');
   header('WWW-Authenticate: Basic realm="Área restrita!"');
   echo 'Erro! Você deve entrar com um login e senha válidos para acessar a administração';

 }

echo '<br />OUTSIDE IF' . PHP_EOL . time() . '<br />' . PHP_EOL . __LINE__ . ':' . __FILE__;


exit; // mantenha isso aqui, pois impedirá que o compilador continue a execução de outros scripts
?>

 

 

e assim por diante.. vai por tentativa e erro..

 

mas pelos resultados acredito que o problema esteja em algum outro script que é executado após esse trecho..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, sou iniciante em php, não entendo algumas coisas. Mas fiz o que você sugeriu, coloquei os breakpoints em linhas diferentes e continuou ocorrendo a mesma coisa, se coloco senha errada, não dá o erro, simplesmente some e volta os campos vazios, mesma coisa com a senha certa.

Estranho que em outro servidor funciona normal, então não deve ser o script.

A pergunta deve ser idiota, mas não tem nada a ver com o endereço do site poder entrar só com www no início e não entrar sem?

 

Ah, não tem mais nenhum script depois, já tentei usar só esse em uma página sem scripts, e nada muda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei assim:

 

<?php
echo 'ok';
exit;

 $login = 'admin';
 $senha = 'admin';

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {
   header('HTTP/1.1 401 Unauthorized');
   header('WWW-Authenticate: Basic realm="Área restrita!"');

   exit('Erro! Você deve entrar com um login e senha válidos para acessar a administração');
 }
?>

 

respondeu ok.

 

Coloquei assim:

 

<?php

 $login = 'admin';
 $senha = 'admin';

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {
	echo 'ok';
	exit;
   header('HTTP/1.1 401 Unauthorized');
   header('WWW-Authenticate: Basic realm="Área restrita!"');

   exit('Erro! Você deve entrar com um login e senha válidos para acessar a administração');
 }
?>

 

respondeu ok.

 

Dai coloquei assim:

 

<?php

 $login = 'admin';
 $senha = 'admin';

 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
   ($_SERVER['PHP_AUTH_USER'] != $login) || ($_SERVER['PHP_AUTH_PW'] != $senha)) {

   header('HTTP/1.1 401 Unauthorized');
echo 'ok';
	exit;
   header('WWW-Authenticate: Basic realm="Área restrita!"');

   exit('Erro! Você deve entrar com um login e senha válidos para acessar a administração');
 }
?>

 

Pediu login e senha, e aconteceu a mesma coisa de antes.

Descendo linha por linha, vai acontecendo a mesma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Execute o phpinfo()

 

<?php
phpinfo();?>

 

Procure por "Server API"

Caso esteja como "CGI/FCGI", não há como usar HTTP_AUTH com o PHP sem fazer "hackz".

 

opção 1

No PHP 5.3 em modo CGI, troque $_SERVER['PHP_AUTH_USER'] por $_SERVER['REMOTE_USER']

 

 

opção 2

No .htaccess, adicione o seguinte hack

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

 

No PHP:

<?php

 $login = 'admin';
 $senha = 'admin';

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

// abaixo, o restante do seu código...

 

 

 

Also note that until PHP 4.3.3, HTTP Authentication did not work using Microsoft's IIS server with the CGI version of PHP due to a limitation of IIS. In order to get it to work in PHP 4.3.3+, you must edit your IIS configuration "Directory Security". Click on "Edit" and only check "Anonymous Access", all other fields should be left unchecked.

Another limitation is if you're using the IIS module (ISAPI) and PHP 4, you may not use the PHP_AUTH_* variables but instead, the variable HTTP_AUTHORIZATION is available. For example, consider the following code: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

http://php.net/manual/en/features.http-auth.php

 

 

obs: caso $_SERVER['HTTP_AUTHORIZATION'] não esteja setado, tente usar $_SERVER['REDIRECT_HTTP_AUTHORIZATION']

 

Outra forma de analisar as variáveis de ambiente é "printar" a variável global $_SERVER

print_r($_SERVER);

 

 

 

Quanto ao redirecionamento que ocorre.. talvez devido ao estado http.

O servidor que provoca o redirecionamento pode estar configurado para redirecionar quando encontra o status 401.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Execute o phpinfo()

 

<?php

phpinfo();?>

 

 

 

Procure por "Server API"

Caso esteja como "CGI/FCGI", não há como usar HTTP_AUTH com o PHP sem fazer "hackz".

 

O Server API está como ISAPI

 

opção 1

No PHP 5.3 em modo CGI, troque $_SERVER['PHP_AUTH_USER'] por $_SERVER['REMOTE_USER']

Desculpa, mas sou realmente iniciante, não sei o que é modo CGI. E depois disso, me perdi nas tuas instruções...

Acho que a minha solução é fazer um login com cookies mesmo...

 

Ah, descobri um bug que pode ajudar... quando pede o login e eu clico no "x", ele entra na página (no chrome)... e no firefox, clico x, e aparece O site diz "Área restrita" e pede login de novo, clico x de novo, e entra na página, porém com o erro lá em cima "Erro! Você deve entrar com um login e senha válidos para acessar a administração" !

 

Alguém pode dar um help?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

// insira essa linha e veja o que retorna..
print_r($_SERVER); exit;

 $login = 'admin';
 $senha = 'admin';

 

obs: não espere que alguém faça o seu serviço.

caso queira suporte particular, contrate um profissional ou empresa qualificada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.