IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] authentification php http : variables PHP_AUTH_*


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut [Sécurité] authentification php http : variables PHP_AUTH_*
    Bonjour, j'ai un petit problème dans ma programmation, pourquoi ça marche pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    // constantes et fonctions simples
    include("info.php");
    include("fct/global/redirect.php");
     
    // classes
    require_once("fct/global/user.php");
     
     
    if (!isset($_SERVER["PHP_AUTH_USER"])) {
    	header("WWW-Authenticate: Basic realm=\"mon petit test\"");
    	header("HTTP/1.0 401 Unauthorized");
     
    	echo("Texte utilisé si le visiteur utilise le bouton d\'annulation");
    	exit;
    } else {
    	// connexion base de données
    	$mysql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD);
    	if (!$mysql) {
    		// connexion non effectuee
    		unset($_SERVER["PHP_AUTH_USER"]);
    		errorRedirect(5);
    	}
     
    	// selection de la base
    	if (!mysql_select_db(MYSQL_DB, $mysql)) {
    		// selection de db non effectué
    		unset($_SERVER["PHP_AUTH_USER"]);
    		errorRedirect(5);
    	}
     
    	$sql = "SELECT iduser, login, mdp, pouvoir, nom, prenom, derniereconnexion"
    	."FROM user WHERE login LIKE '"
    	.mysql_real_escape_string($_SERVER["PHP_AUTH_USER"])."';";
     
    	$result = mysql_query($sql, $mysql);
     
    	session_start();
     
    	if (!$result) {
    		// le login n'existe pas
    		unset($_SERVER["PHP_AUTH_USER"]);
    		errorRedirect(2);
     
    	} else {
    		$row = mysql_fetch_assoc($result);
    		if ($row["login"] == $_SERVER["PHP_AUTH_USER"] && $row["mdp"] == $_SERVER["PHP_AUTH_PW"]) {
    			$user = new user($row["iduser"]);
    			$user->setLogin($row["login"]);
    			$user->setPower($row["pouvoir"]);
    			$user->setFirstName($row["prenom"]);
    			$user->setLastName($row["nom"]);
    			$user->setLastLog(date_create());
    			// creation de l'objet session
    			$_SESSION["user"] = $user;
     
    			// insertion de la date de dernière connexion dans la bd
    			$sql = "UPDATE user SET derniereconnexion = "
    			.$user->getLastLog()
    			." WHERE iduser = ".$user->getIdUser().";";
     
    			if (!mysql_unbuffered_query($sql, $mysql)) {
    				unset($_SESSION);
    				session_destroy();
    				errorRedirect(5);
    			}
     
    		} else {
    			unset($_SERVER["PHP_AUTH_USER"]);
    			unset($_SESSION);
    			session_destroy();
    			errorRedirect(3);
     
    		}
    	}
    	mysql_close($mysql);
     
    }
    le code doit être assez clair...

    mon problème est le suivant: j'ai bien eu une fois la demande de mot de passe, mais lorsque je me trompe d'utilisateur/mot de passe, ça me redirige en permanence avec la fonction "errorRedirect" comme s'il gardait la variable PHP_AUTH_USER en mémoire en permanence, j'ai essayé d'utiliser unset pour la libérer mais ça ne marche pas... je ne vois pas d'info sur ce problème assez gênant dans la documentation php!

    aidez moi svp

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour

    Je ne sais pas si ça a un rapport avec ton problème, mais j'ai repéré un truc qui me gène : un session_start() au milieu du code.
    Or le session_start() doit être placé avant tout envoi de quoique ce soit. Ce qui fait qu'en règle générale on le place au tout début du script...

    D'autre part, $_SERVER['PHP_AUT_USERS'] est une variable prédéfinie dans le serveur. Donc tu ne peux pas la réintialiser (enfin, je crois...)
    Citation Envoyé par php.net
    'PHP_AUTH_USER'
    Lorsque vous utilisez PHP avec Apache ou IIS (ISAPI en PHP 5) en tant que module faisant une identification HTTP, cette variable est définie à l'utilisateur fourni par l'utilisateur.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    merci pour ta réponse,

    j'ai mis le session_start() au milieu car en temps normal aucun header ou ligne n'est écrite jusque là... mais bon, c'est vrai que c'est pas top top.

    sinon pour les variables $_SERVER je pense aussi que le unset ne marche par car c'est des $_SERVER, mais pourtant dans la documentation ils se servent de la fonction isset() pour vérifier si l'utilisateur a rentré quelque chose... que dois-je comprendre dans tout ceci?


    sinon, pour avancer j'ai fais un simple système basé par un formulaire et une variable session, j'avais envie d'utiliser le méthode http car je pensais plus sécurisée et plus pratique mais maintenant, j'ai bien envie de retourner vers quelque chose que je connais.

    ps: j'utilise apache2 sous debian 4 couplé à une base de données mysql sur le même ordinateur.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Certainement pas plus sécurisé : vous trouverez toujours les login et mot de passe en clair dans les entêtes HTTP à défaut d'utiliser le protocole HTTPS ou un autre procédé (hachage du mot de passe côté client, par exemple, lorsque l'authentification est faire par l'intermédiaire d'un banal formulaire - voir Chiffrement et hash en PHP contre l'attaque Man in the middle).

    Quant aux variables $_SERVER, je confirme les propos de Celira : toute modification sur ces variables n'affectera uniquement l'exécution du script courant. Lorsqu'il sera de nouveau appelé (lui ou un autre), toutes ces variables seront réinitialisées sur les valeurs originales fournies par le serveur.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 54
    Points : 41
    Points
    41
    Par défaut
    ok, merci bien pour vos réponses,

    je vais regarder à tout ça, mettre du https ça semble pas si inhumain que ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] Authentification en php
    Par DrOOMMgba dans le forum Langage
    Réponses: 11
    Dernier message: 04/06/2007, 14h38
  2. [Sécurité] authentification http et sous repertoires
    Par arginine dans le forum Langage
    Réponses: 3
    Dernier message: 30/09/2006, 17h23
  3. Réponses: 3
    Dernier message: 17/08/2006, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo