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

PHP & Base de données Discussion :

exception mot de passe affiché en clair [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut exception mot de passe affiché en clair
    Bonjour,

    Après une exeption, j'ai eu un message d'erreur qui affichait le serveur, le nom de ma base de donnée, le user, et le mot de passe (en rouge sur l'image ci-dessous).
    Tout ça en clair.

    C'est normal ?
    Nom : pdo erreur.GIF
Affichages : 251
Taille : 12,8 Ko
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En production PDO doit être en mode silencieux (mode par défaut).
    Le serveur PHP globalement d'ailleurs ne doit pas afficher les erreurs en production.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Oui, c'est sur mais de la à afficher toutes les données de connexion en clair ....
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est contestable pour le mot de passe c'est sûr mais un mode de debugage doit bien afficher des informations.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    C'est d'autant plus normal que tu n'as pas géré l'exception de la connexion.
    PDO::__construct() émet une exception PDOException si la tentative de connexion à la base de données échoue.
    cf pdo construct

    Tu pourrais faire afficher ce que tu veux en cas d'erreur de connexion en gérant cette exception.

  6. #6
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    du genre comme cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
        $connexion= new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } 
    catch (PDOException $e) {
        echo 'Connexion échouée';
    }
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui par exemple. A noter que depuis quelques années tu peux mettre le charset après le paramètre database. Aussi il est recommandé de désactiver l'émulateur pdo de php pour faire travailler celui du sgbb qui est plus optimisé. Typiquement cela donne :
    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
    try {
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    // Permet d'utiliser l'émulateur pdo spécifique au sgbdd. Indispensable pour éviter que la fonction execute() formate le tableau de valeurs (correspondant aux marqueurs) passé en paramètre dans cette fonction en "string", sinon bug avec la clause limit.
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
     
    /* autres options de configurations,  par exemple pour récupérer les résultats en mode objet : 
    $pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;
    */
     
    $connexion= new PDO($dsn.';charset=utf8', $user, $password, $pdo_options);
    } 
    catch (PDOException $e) {
        echo 'Connexion échouée';
    }
    Pour tes requêtes suivantes n'oublies pas de faire un $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); si elles ne sont pas dans des blocs try/catch qui permettent de gérer les exceptions.

  8. #8
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Si j’interprète correctement le message d’erreur, ce n’est pas PDO à proprement parler qui dévoile le mot de passe, mais PHP en affichant les détails de l’exception. Le vrai problème est que le mot de passe se trouve en dur dans le code justement à la ligne qui lève l’exception. Il est généralement recommandé de ne pas mettre ses mots de passe en dur dans le code, surtout quand celui-ci est versionné ; à la place, utilise les variables d’environnement quand c’est possible (en hébergement mutu, ce n’est souvent pas possible malheureusement), ou alors un fichier include inaccessible depuis le web.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le message d'erreur affiche le mot de passe même s'il vient d'une variable.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Merci ABCIWEB

    J'ai fait comme tu me l'a proposé

    Par contre, je n'ai pas compris (même en lisant la doc) à quoi sert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    J'ai une partie de mes requêtes dans des blocs try/catch et une autres sans ce bloc.

    C'est grave docteur ?
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Si tu utilises le mode exception il faut que tes requêtes soient dans un bloc try/catch pour gérer l'exception sinon en cas d'erreur tu vas avoir un message "uncaught exception ...". Pour les requêtes sans bloc try/catch on utilise la plupart du temps le mode SILENT. Donc si au début tu utilises le mode exception et qu'ensuite tu fais des requêtes sans bloc try/catch il faut changer le mode d'erreur.

    En résumé dans l'idéal ce serait mieux que toutes les erreurs soient gérées de la même façon et de préférence en utilisant le mode exception, mais on peut alterner les modes (ici EXCEPTION et SILENT) en adaptant la gestion des erreurs suivant les cas avec $connexion->setAttribute(mode d'erreur). Compris ?

  12. #12
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Yes moi y en avoir compris car explication claire
    Encore merci ...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

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

Discussions similaires

  1. [2.x] recuperer le mot de passe FOSUserbundle en clair
    Par alexgnac dans le forum Symfony
    Réponses: 2
    Dernier message: 21/03/2012, 16h26
  2. Mot de passe enregistré en clair !
    Par nestea57 dans le forum 1&1
    Réponses: 2
    Dernier message: 02/08/2011, 18h21
  3. [XL-2003] Mot de passe affiché à la place de l'utilisateur
    Par AzelRoth dans le forum Excel
    Réponses: 1
    Dernier message: 15/03/2011, 16h07
  4. mot de passe affiché dans titre fenêtre
    Par panro dans le forum IHM
    Réponses: 3
    Dernier message: 11/03/2008, 21h54
  5. Réponses: 6
    Dernier message: 24/08/2007, 15h29

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