Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2010, 16h49   #1
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
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 :
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
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 17h00   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
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 :
$retour=$req->fetch(PDO::FETCH_ASSOC);
ca sert a rien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 17h20   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
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
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 17h39   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/12/2010, 18h30   #5
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
bah c'est son alias non ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 21h34   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
Citation:
Envoyé par Madfrix Voir le message
bah c'est son alias non ?
ouai justement, c'est déconseiller d'utiliser les alias

Citation:
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 10h31   #7
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
Code :
$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:

Citation:
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
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 10h53   #8
Membre du Club
 
Thibaut LEFEBVRE
Finance
Inscription : octobre 2009
Messages : 123
Détails du profil
Informations personnelles :
Nom : Thibaut LEFEBVRE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Finance
Secteur : Finance

Informations forums :
Inscription : octobre 2009
Messages : 123
Points : 45
Points : 45
Salut tout le monde,

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

Code :
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...)
Souri84 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/12/2010, 11h31   #9
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 245
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 245
Points : 1 502
Points : 1 502
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 :
PDO::PARAM_INT / PDO::PARAM_STR
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 11h42   #10
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
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
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h21.


 
 
 
 
Partenaires

Hébergement Web