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 :

Sécurité avec PDO [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 53
    Points
    53
    Par défaut Sécurité avec PDO
    Bonjour,

    J'utilise pour la première fois PDO.
    J'ai compris que les requêtes préparées sécurisées des injections SQL.

    j'utilise le code suivant pour modifier un mot de passe d'un utilisateur:

    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{
    $DB = new PDO('pgsql:host=localhost;dbname=local', 'postgresSQL', 'password');
    //afficher les erreurs car PDO n'affiche pas les erreurs par défaut 
    $DB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e){
    echo 'La base de donn&eacute;es n\'est pas disponible pour le moment.<br/>';
    }
     
    $sql='update administration set mdp=:mdp where login=:login';
    				$req=$DB->prepare($sql);
    				$req->execute(array( 'login' => $_SESSION['login'], 'mdp' => $_POST['nouveau_mdp'] ));
    				$retour=$req->fetch(PDO::FETCH_ASSOC);
    				echo('Modification du mot de passe effectuée<br/>');
    J'ai 2 questions:
    1 Le code est-il sécurisé (passer des _SESSION ou $_POST en variable à la reqête préparée ne pose pas problème)?

    2 Si je mets via un formulaire le mot de passe : "l'arc" je m'attendais à voir dans la base "l\'arc" et que le ' soit échappé par PDO. Or dans la base je vois "l'arc". Est-ce normal ?

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    je t'invite a voir a quoi correspond les requêtes préparées
    http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html


    par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour=$req->fetch(PDO::FETCH_ASSOC);
    ca sert a rien

  3. #3
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    le echo dans le catch ne sert pas à grand chose non plus, il ne va pas arrêter l'exécution du code qui plantera après sur le prepare(), il vaut mieux faire un die

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    le echo dans le catch ne sert pas à grand chose non plus, il ne va pas arrêter l'exécution du code qui plantera après sur le prepare(), il vaut mieux faire un die
    +1
    mais c'est pas die mais exit

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    bah c'est son alias non ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    bah c'est son alias non ?
    ouai justement, c'est déconseiller d'utiliser les alias

    C'est une très mauvaise habitude d'utiliser ces alias, car ils risquent à tous moment de disparaître, rendus obsolète sans préavis, ou bien par un simple changement de nom, ce qui rend votre script inutilisable avec des versions plus récentes de PHP. Préférez toujours les versions officielles.
    http://php.net/manual/fr/aliases.php

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 53
    Points
    53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour=$req->fetch(PDO::FETCH_ASSOC);
    Il me permet de retourner un tableau indexé par le nom de la colonne, donc il sert, non ?

    Et pour mes 2 questions car même après avoir lu ta doc stealth35 j'ai toujours des interrogations:

    1 Le code est-il sécurisé (passer des _SESSION ou $_POST en variable à la reqête préparée ne pose pas problème)?

    2 Si je mets via un formulaire le mot de passe : "l'arc" je m'attendais à voir dans la base "l\'arc" et que le ' soit échappé par PDO. Or dans la base je vois "l'arc". Est-ce normal ?
    Je vais rajouter le exit, mais d'un coté si ça plante ça s'arrête tout seul, pas besoin de "exit" ...

    Je débute en php

  8. #8
    Membre régulier
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 125
    Points : 82
    Points
    82
    Par défaut
    Salut tout le monde,

    Perso, il m'arrive de passer des $_SESSION directement dans le array() du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req->execute(array($_SESSION['X'], $variable1, $variable2 ...));
    Et je n'ai pas de soucis...

    Après pour le $_POST, j'utilise extract($_POST); du coup, ça me passe tout en variable et c'est plus simple je trouve (et sans doute plus sécurisant... mais ça je n'en suis pas tout à fait sûr...)

  9. #9
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    Salut,

    tu peux aussi passer par bindValue php.net/manual/en/pdostatement.bindvalue.php j'aime bien cette methode car tu peux preciser s'il s'agit d'un int ou d'un string...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PDO::PARAM_INT / PDO::PARAM_STR
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 129
    Points : 53
    Points
    53
    Par défaut
    Mon code est donc sécurisé (SQL injection entre autres) ?
    J'avais peur que le fait de passer en paramètre de ma requete des _POST ou _SESSION réouvre des failles fermées par le prepare et le execute

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

Discussions similaires

  1. Problème de sécurité avec MS Access
    Par jpduches dans le forum Sécurité
    Réponses: 2
    Dernier message: 13/12/2010, 15h44
  2. [Sécurité] A propos de la sécurité avec J2EE
    Par kodo dans le forum Java EE
    Réponses: 3
    Dernier message: 03/06/2006, 21h45
  3. [Sécurité] Problème de sécurité avec l'upload
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 14/04/2006, 10h54
  4. [Sécurité] Sécurité avec .HTACCESS
    Par BRAUKRIS dans le forum Langage
    Réponses: 3
    Dernier message: 02/04/2006, 00h01
  5. sécurité avec C
    Par chiheb366 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 14/10/2005, 12h30

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