PDA

View Full Version : PHP - Proteggere pagine con password


negator136
26-07-2006, 10:19
sto provando ad usare questo "script" per proteggere alcune pagine web:

<?
if ( ( !isset( $PHP_AUTH_USER )) || (!isset($PHP_AUTH_PW))
|| ( $PHP_AUTH_USER != 'nomeutente' ) || ( $PHP_AUTH_PW != 'password' ) ) {

header( 'WWW-Authenticate: Basic realm="Nome sito"' );
header( 'HTTP/1.0 401 Unauthorized' );
echo 'Nome utente o password errati';
exit;

}
?>

il problema è che dopo aver inserito "nomeutente" e "password" nella prima finestra di autenticazione, se ne apre un altra con scritto:

"Inserire nome utente e password per www.miosito.com su http://www.miosito.com"

in questo caso i parametri inseriti nello script non hanno effetto...

qualcuno può spiegarmi dove sbaglio per favore? :(

grazie!

negator136
26-07-2006, 10:41
Il controllo su username e password inseriti devono essere eseguiti ovviamente dopo aver richiamato gli header per l'autenticazione:

...

ok, ho corretto il codice come mi hai detto (anche se il mio l'avevo scaricato pari pari da un sito...)... però il problema persiste... mi viene richiesta una seconda autenticazione... alla quale non so dare risposta...

a scanso di equivoci, scrivo esattamente qutto quello che ho fatto:

file autenticazione.inc.php:

<?php
$user = "username";
$pass = "password";
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header("WWW-Authenticate: Basic realm=\"Nome Sito\"");
header("HTTP/1.0 401 Unauthorized");
exit;
}
else if (($_SERVER['PHP_AUTH_USER'] == $user) && ($_SERVER['PHP_AUTH_PW'] == $pass)) {
echo "Login eseguito con successo...";
}
else { echo "Errore di login!!"; }
?>

file da proteggere:

<?php include('autenticazione.inc.php'); ?> //in cima alla pagina

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>titolo</title>
</head>

<body>

<p>testo privato</p>


</body>
</html>




:muro: :muro: :muro: :(

andbin
26-07-2006, 11:05
Io ho appena provato questo codice e funziona.
<?php
$username = "prova";
$password_hash = "e10adc3949ba59abbe56e057f20f883e";

if (!isset ($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] != $username ||
md5 ($_SERVER['PHP_AUTH_PW']) != $password_hash)
{
header ('WWW-Authenticate: Basic realm="Esempio di autenticazione"');
header ('HTTP/1.0 401 Unauthorized');
echo 'Inserire username/password';
exit;
}
?>
<html>
<body>

<p>Sei loggato come utente <strong><?php echo $_SERVER['PHP_AUTH_USER']; ?></strong>.</p>

</body>
</html>

negator136
26-07-2006, 11:46
Io ho appena provato questo codice e funziona.


ok, ho provato anche questo ma mi da lo stesso problema...

che sia un problema del server di aruba?? :muro:


vi linko direttamente la pagina col codice di andbin:

http://www.ameroni.com/blog/admin.php

nome utente: prova
password: noob

grazie per l'aiuto :)

andbin
26-07-2006, 12:20
ok, ho provato anche questo ma mi da lo stesso problema...Sì, è vero, l'ho verificato adesso. Vengono fatte 2 autenticazioni in cascata.

che sia un problema del server di aruba?? :muro: Problema non credo, semmai è una questione di configurazione.

Quello che so è che l'autenticazione HTTP può anche essere gestita direttamente dal web server. Quindi, nel tuo caso, prima viene gestita l'autenticazione dal PHP e poi la seconda dal web server.

Il tuo sito vedo che gira su server IIS, che non conosco e quindi non saprei dirti di più. Con Apache si possono usare delle direttive da mettere ad esempio in un file .htaccess per gestire questa autenticazione.

Il tuo sito ha un pannello di controllo?? Prova a vedere se c'è qualcosa relativo a questa autenticazione. Al massimo chiedi a quelli di aruba ...

negator136
26-07-2006, 13:21
Sì, è vero, l'ho verificato adesso. Vengono fatte 2 autenticazioni in cascata.

Problema non credo, semmai è una questione di configurazione.

Quello che so è che l'autenticazione HTTP può anche essere gestita direttamente dal web server. Quindi, nel tuo caso, prima viene gestita l'autenticazione dal PHP e poi la seconda dal web server.

Il tuo sito vedo che gira su server IIS, che non conosco e quindi non saprei dirti di più. Con Apache si possono usare delle direttive da mettere ad esempio in un file .htaccess per gestire questa autenticazione.

Il tuo sito ha un pannello di controllo?? Prova a vedere se c'è qualcosa relativo a questa autenticazione. Al massimo chiedi a quelli di aruba ...

ok, ti ringrazio per le spiegazioni. in questi giorni mi stai dando un sacco di ottime informazioni :)

vedrò di contattare quelli di aruba, visto che il pannello di controllo che mi forniscono fa davvero pietà. :(

tornando al tuo codice... premettendo che fino a 5 minuti fa non sapevo neanche cosa fosse un hash, vorrei capire come fare a decifrare "e10adc3949ba59abbe56e057f20f883e"... il procedimento inverso si fa con md5... su internet non ho trovato alcun modo per passare da hash a text...

il fatto di sfruttare l'esadecimale e solo per questioni di sicurezza vero? :stordita:

EDIT: che niubbo che sono... wikipedia: "Non esiste una corrispondenza biunivoca tra l'hash e il testo." :doh: però suppongo che una parola dia sempre lo stesso hash se buttata nella funzione md5... quindi solo tu sai quanto vale il tuo codice esadecimale? vero?



nel caso sciagurato che non riuscissi a risolvere il problema di autenticazione, in attesa di cambiare hoster, come mi consigliate di proteggere le mie pagine? posso fare una pagina di login che ti lascia due cookie (uno per lo user e uno per la password) e fare in modo che ogni pagina da proteggere controlli che i cookie siano in regola?


grazie :)

andbin
26-07-2006, 13:47
vedrò di contattare quelli di aruba, visto che il pannello di controllo che mi forniscono fa davvero pietà. :( Credo che sia meglio. Aruba non lo conosco ... IIS non lo conosco ... :boh:

tornando al tuo codice... premettendo che fino a 5 minuti fa non sapevo neanche cosa fosse un hash, vorrei capire come fare a decifrare "e10adc3949ba59abbe56e057f20f883e"... il procedimento inverso si fa con md5... su internet non ho trovato alcun modo per passare da hash a text... Per generare un hash puoi usare il "mio" tool <qui> (http://andbin.altervista.org/tools/hash-calc.php). Per fare il contrario esiste <questo> (http://md5.rednoize.com/) servizio. Per quest'ultimo nota bene che il database degli hash è limitato (ovviamente).

Le funzioni hash comunque funzionano così: ad un certo input corrisponde sempre un hash ben preciso. Un certo valore hash può essere generato da N input diversi.

il fatto di sfruttare l'esadecimale e solo per questioni di sicurezza vero? :stordita: L'hash come indicato nel mio sorgente servirebbe solo per non mettere in "chiaro" la password all'interno del sorgente.

EDIT: che niubbo che sono... wikipedia: "Non esiste una corrispondenza biunivoca tra l'hash e il testo."Esatto.

nel caso sciagurato che non riuscissi a risolvere il problema di autenticazione, in attesa di cambiare hoster, come mi consigliate di proteggere le mie pagine? posso fare una pagina di login che ti lascia due cookie (uno per lo user e uno per la password) e fare in modo che ogni pagina da proteggere controlli che i cookie siano in regola? Fare il classico form di login può andare bene. Comunque nei cookie non mettere solo la password in chiaro!

negator136
26-07-2006, 14:00
Fare il classico form di login può andare bene. Comunque nei cookie non mettere solo la password in chiaro!

nei cookie sto mettendo i due hash di username e password... spero che vadano bene :)

grazie per le risposte


ps: stavo già usando il tuo tool prima che me lo dicessi :D grande :D