Authentification HTTP au moyen d'une bdd.

Eléphant du PHP | 112 Messages

30 déc. 2007, 18:07

Bonjour,

J'ai travaillé en local avec ce script d'authentification, mais sans succès. J'espérais réussir en distant, pas mieux:
$auth = FALSE;

if ((isset($_SERVER['PHP_AUTH_USER']) AND
	isset($_SERVER['PHP_AUTH_PW'])))
{
//Script de connexion à la base de données OK

	$sql="SELECT clef_utilisateur FROM utilisateur WHERE login='{$_SERVER['PHP_AUTH_USER']}'
	AND mot_de_passe=PASSWORD('{$_SERVER['PHP_AUTH_PW']}')";
	$requete=mysql_query($sql);
	$ligne=@mysql_fetch_array($requete);
	
	if($ligne)
	{

	$auth = TRUE;
	}
	}

	if(!$auth)
	{
	header('WWW-Authenticate: Basic realm="acces securise au backoffice"');
	header('HTTP/1.0 401 Unauthorized');
	}
	
Après avoir saisi login et mot de passe extraits de la base, la page en haut de laquelle se trouve ce script devrait s'ouvrir, or c'est la fenêtre de saisie qui réapparait. Si je clique sur le bouton "annuler" de ladite fenêtre, j'ouvre la page protégée...
Merci d'avance pour votre aide, et meilleures salutations

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 déc. 2007, 18:42

fait un
echo $sql
après la création de ta requête, tu verras apparaitre le soucis

PS : il faut toujours extraire les variables des chaines
echo "valeur : ". $value ." unité(s)";
Plutôt que
echo "valeur : $value unité(s)";
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

30 déc. 2007, 20:35

Bonjour à toi,

Ta remarque m'a amenée à changer ce bout de code:

mot_de_passe=PASSWORD('{$_SERVER['PHP_AUTH_PW']}')
en
mot_de_passe='{$_SERVER['PHP_AUTH_PW']}'
Mais les symptômes restent les mêmes...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 déc. 2007, 20:36

Quand tu as affiché ta requête, tu as dû voir un truc de ce genre

Code : Tout sélectionner

SELECT clef_utilisateur FROM utilisateur WHERE login='{lelogin} AND mot_de_passe=PASSWORD('{lepassword}')
Est-ce que tu crois que cette syntaxe est correcte ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 112 Messages

31 déc. 2007, 01:09

En fait, j'obtiens
SELECT clef_utilisateur FROM utilisateur WHERE login='' AND mot_de_passe=''
et la syntaxe
login='{$_SERVER['PHP_AUTH_USER']}'
	AND mot_de_passe='{$_SERVER['PHP_AUTH_PW']}'
me parait correcte. Tout se passe comme si les variables ne prenaient pas les valeurs saisies dans la fenêtre de demande d'authentification, et je ne parviens pas à comprendre pourquoi.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 déc. 2007, 01:12

Tout d'abord, j'avoue ne pas comprendre quelle est l'utilité des caractères { et }.

Sinon, fait un
print_r($SERVER);
et tu verras si les variables existent ou non.
Si elles n'existent pas, ce n'est pas la requête qui ne fonctionne pas, mais l'authentification HTTP ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 112 Messages

31 déc. 2007, 18:24

Bonjour,

L'intêret des accolades est de pouvoir traiter une valeur extraite d'un tableau à l'intérieur d'une chaîne de caractères, mais cela va à l'encontre de ce que tu préconisais précédemment (d'où le fait que tu ne voies pas l'intérêt de cette syntaxe).
Ensuite, effectivement, je n'ai pas retrouvé, en faisant
print_r($_SERVER);
les variables utilisées dans le script. J'aurais aussi bien pu m'en rendre compte en faisant phpinfo(), non?
Il s'agirait donc d'un problème de version, et je vais devoir penser à une authentification via les sessions. Dommage, ce script compact me plaisait bien...
Merci pour tes réponses.