Boss183 |
Le 26/02/2008 Ã 16:10 |
|
|
Bonjour à tous, je souhaiterais protéger une page HTML grâce à l'authentification HTTP et en utilisant des noms d'utilisateurs et mot de passe déjà contenu dans ma base de données, j'ai trouvé un script pour ce que je souhaite faire, au début je me connecte à ma BDD (jusque là pas de problème) mais par la suite le script donne ça :
// Interroger la base de données $rq = "SELECT prenom FROM utilisateurs WHERE nom_utilisateurs='{$_SERVER['PHP_AUTH_USER']}' AND mot_de_passe=PASSWORD('{$_SERVER['PHP_AUTH_PW']}'}"; $result = mysql_query ($rq); $ligne = @mysql_fetch_array ($result); if ($ligne) { // Si un enregistrement a été renvoyé $auth = TRUE; } } //Si on trouve rien: if (!$auth) { header('WWW-Authenticate: Basic realm="homelive"'); header('HTTP/1.0 401 Unauthorized'); //Coup d'arrêt } ?>
j'ai remplacé nom_utilisateur pas idUSER et mot_de_passe par mdp
pour que ça corresponde à ma table (je ne sais si j'ai bien fait ça correctement)
lorsque je lance ma page HTML on me demande bien de m'authentifier mais l'authentification ne marche pas alors que je tape un idUSER et un mdp existant ds ma BDD.
De plus, j'ai entendu dire que l'on pouvait utiliser cette fonction que si PHP fonctionnait en module apache mais comment savoir si PHP est exécuté en qualité de module d'Apache et non en CGI.
Merci d'avance |
Anthony |
Le 26/02/2008 Ã 17:10 |
|
 Admin |
Salut  Est-ce que tes mots de passe sont bien encodés avec la fonction PASSWORD() de MySQL ? car si tes mots de passe sont encodés avec autre chose (genre md5() ou pire pas encodés du tout donc visibles en clair) ça ne fonctionnera pas ;) Sinon pour savoir si PHP est en module apache ou en CGI, appelle la fonction phpinfo() dans une page  Sinon attention car ton script contient une belle faille de sécurité :) Voilà ton script corrigé :
<?php
// Interroger la base de données
  $result = mysql_query ('SELECT prenom FROM utilisateurs
        WHERE nom_utilisateurs="'.mysql_real_escape_string($_SERVER['PHP_AUTH_USER']).'"
        AND mot_de_passe=PASSWORD("'.mysql_real_escape_string($_SERVER['PHP_AUTH_PW']).'")') OR die('erreur');
  if(mysql_num_rows($result) === 0)
  {
        header('WWW-Authenticate: Basic realm="homelive"');
        header('HTTP/1.0 401 Unauthorized'); //Coup d'arrêt
        exit;
  }
  //ici le code protégé
?>
-- 
|
Boss183 |
Le 27/02/2008 Ã 14:27 |
|
|
merci beaucoup anthony et qu'est-ce qu'il faut changer si mes mot de passe sont encodé en MD5 ? |
Anthony |
Le 27/02/2008 Ã 22:43 |
|
 Admin |
à la place de PASSWORD tu mets MD5 -- 
|
Boss183 |
Le 03/03/2008 Ã 09:56 |
|
|
En fait j'ai fait avec le mot de passe encodé avec la fonction PASSWORD de phpMyAdmin mais lorsque je lance mon fichier PHP voila l'erreur qu'il me met
Notice: Undefined index: PHP_AUTH_USER in c:\projet_homelive\anthony.php on line 15
Notice: Undefined index: PHP_AUTH_PW in c:\projet_homelive\anthony.php on line 16
Warning: Cannot modify header information - headers already sent by (output started at c:\projet_homelive\anthony.php:15) in c:\projet_homelive\anthony.php on line 20
Warning: Cannot modify header information - headers already sent by (output started at c:\projet_homelive\anthony.php:15) in c:\projet_homelive\anthony.php on line 21
<?php
//paramètres de connexion
require('C:\Projet_homelive\parametres\mysql_params.php');
//fonctions de connexion au serveur mysql
require('C:\Projet_homelive\utils\mysql_connexion.php');
    //connexion à la base de données
    //paramètres : serveur, utilisateur, mot de passe, base de données
    $link = DBconnect($serveur,$user,$mdp,$bdd);
   Â
// Interroger la base de données
  $result = mysql_query ('SELECT idADMIN FROM admin
        WHERE idADMIN="'.mysql_real_escape_string($_SERVER['PHP_AUTH_USER']).'"
        AND mdp=PASSWORD("'.mysql_real_escape_string($_SERVER['PHP_AUTH_PW']).'")') OR die('erreur');
  if(mysql_num_rows($result) === 0)
  {
        header('WWW-Authenticate: Basic realm="homelive"');
        header('HTTP/1.0 401 Unauthorized'); //Coup d'arrêt
        exit;
  }
  //ici le code protégé
echo "<H1>trop bien</H1>"
?>
(spécial dédicasse pour le nom du fichier anthony ^^) et ouai donc je sais pas trop quoi faire voilà mon script entier
|
Anthony |
Le 03/03/2008 Ã 12:42 |
|
 Admin |
require('C:\Projet_homelive\parametres\mysql_params.php'); ==> ça c'est très mauvais, il faut mettre un chemin relatif et pas absolu, c'est à dire que tu mets require 'prarametres\mysql_params.php'; et non le chemin entier. Ensuite si la variable n'existe pas il faut exécuter PHP en module apache et non CGI. Cependant tu peux essayer de faire ça :
<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
}
else
{
    //ton code de traitement
}
?>
essaie ça  -- 
|
Boss183 |
Le 03/03/2008 Ã 13:45 |
|
|
merci Anthony mais je n'ai pas très bien compris ce que je mettais dans else  |
Anthony |
Le 03/03/2008 Ã 14:35 |
|
 Admin |
Bah dans le else ça veut dire que le mec a renseigné un auth_user, en toute rigueur faudrait faire ça :
if(!isset($_SERVER['PHP_AUTH_USER']) OR !isset($_SERVER['PHP_AUTH_PASSWORD']))
et dans le else faut mettre la connexion à mysql qui vérifie si l'auth_user ou l'auth_password sont les bons. -- 
|