Ir para conteúdo

POWERED BY:

Arquivado

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

DeathStroker

Como enviar login e senha por GET e/ou POST nesse tipo de autenticação

Recommended Posts

<?php
$realm
= 'Área restrita';

//usuário => senha
$users = array('admin' => 'mypass', 'guest' => 'guest');


if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

die(
'Texto enviado caso o usuário clique no botão Cancelar');
}



// analisar a variável PHP_AUTH_DIGEST
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
!isset(
$users[$data['username']]))
die(
'Credenciais inválidas!');


// gerar a resposta válida
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if (
$data['response'] != $valid_response)
die(
'Credenciais inválidas!');

// ok, nome de usuário e senha válidos
echo 'Você está logado como: ' . $data['username'];


// função para decompor o http auth header
function http_digest_parse($txt)
{
// proteção contra dados incompletos
$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
$data = array();
$keys = implode('|', array_keys($needed_parts));

preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);

foreach (
$matches as $m) {
$data[$m[1]] = $m[3] ? $m[3] : $m[4];
unset(
$needed_parts[$m[1]]);
}

return
$needed_parts ? false : $data;
}

?>

 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

$realm = 'Área restrita';

 

//usuário => senha

$users = array('admin' => 'mypass', 'guest' => 'guest');

 

 

if (empty($_SERVER['PHP_AUTH_DIGEST'])) {

header('HTTP/1.1 401 Unauthorized');

header('WWW-Authenticate: Digest realm="'.$realm.

'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

 

die('Texto enviado caso o usuário clique no botão Cancelar');

}

 

 

// analisar a variável PHP_AUTH_DIGEST

if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||

!isset($users[$data['username']]))

die('Credenciais inválidas!');

 

 

// gerar a resposta válida

$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);

$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);

$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

 

if ($data['response'] != $valid_response)

die('Credenciais inválidas!');

 

// ok, nome de usuário e senha válidos

echo 'Você está logado como: ' . $data['username'];

 

 

// função para decompor o http auth header

function http_digest_parse($txt)

{

// proteção contra dados incompletos

$needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);

$data = array();

$keys = implode('|', array_keys($needed_parts));

 

preg_match_all('@(' . $keys . ')=(? :([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER);

 

foreach ($matches as $m) {

$data[$m[1]] = $m[3] ? $m[3] : $m[4];

unset($needed_parts[$m[1]]);

}

 

return $needed_parts ? false : $data;

}

?>

 

 

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

 

Esse é o código utilizado para criar o formulário.

Eu queria o código para enviar o login e senha automaticamente nesse tipo de form.

 

Eu sei que por CURL é possível realizar autenticação em formulários html, mas nesse ai eu não faço ideia.

Ex: http://blog.thiagobelem.net/login-automatico-em-php-usando-curl/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi por conta própria. Como eu sei que este tópico será encontrado por pessoas com o mesmo problema, deixarei o que fiz abaixo:

<?php 
// HTTP authentication 
$url = "http://host.com.br"; 
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_USERPWD, "login:senha");  
$result = curl_exec($ch);  
curl_close($ch);  
//echo $result; //<= Retire o comentário para dar um echo no resultado da operação.
?> 

Uma outra informação que deixarei aqui é o nome desse tipo de autenticação, que foi uma das dúvidas que tive.
Até porque sem saber do que se trata, é impossível procurar por algo na net.

 

Chama-se "HTTP Basic Authentication" e também pode-se fazer login automático utilizando headers, ex:

header("Authorization: Basic " . base64_encode($username . ":" . $password);

Assim também funciona (via GET):

http://user:pass@host/

Espero que este tópico ajude alguém futuramente.

Abraços.

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.