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 :

intérêt de bindParam pour requête preparé, plus sécurisé ?


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 6
    Par défaut intérêt de bindParam pour requête preparé, plus sécurisé ?
    Bonjour,
    Quel est l'avantage d'utiliser une requête préparé avec bindParam du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req=$bdd->prepare('SELECT name FROM user LIMIT :offset, :nbUser');
    $req->bindParam('offset', $offset, PDO::PARAM_INT);
    $req->bindParam('nbUser', $nbUser, PDO::PARAM_INT);
    $req->execute();
    Putôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req=$bdd->prepare('SELECT name FROM user LIMIT :offset, :nbUser');
    $req->execute(array('offset'=>$offset,'nbUser'=>$nbUser));
    J'ai entendu dire que la version avec bindParam est plus sécurisé car elle associe la variable à un paramètre de la requête et non directement dans la chaine de la requête, en plus d'être typé avec PARAM_INT.

    Niveau sécurité, elles sont équivalentes ou je doit en privilégié une ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 499
    Par défaut
    Bonjour,

    Il n'y a pas de différence en terme de sécurité entre les 3 méthodes bindParam(), bindValue() ou execute(). Elle sont toutes les 3 sécurisées contre les injections sql.

    La méthode bindParam() permet de lier une variable par référence à un paramètre de la requête, surtout utile si il y a plusieurs exécution de la requête et que la valeur de la variable peut changer entre chaque exécution
    Voir l'exemple 1 sur cette doc où les variables $name et $value utilisées avec bindParam() changent entre les deux exécutions : https://www.php.net/manual/fr/pdo.pr...statements.php

    La méthode bindValue() permet de lier une valeur à un paramètre, si il y a une seule exécution ou si les valeurs ne changent pas entre plusieurs exécutions, cette méthode est alors plus adaptée.

    L'intérêt des méthodes bindParam() ou bindValue() par rapport à execute() est effectivement le fait de pouvoir définir le type de données (via execute() les données sont toutes considérées de type PDO:: PARAM_STR).
    Les SGBD peuvent peuvent reconnaitre et traiter les autres types de données sans problème même si ceux-ci sont envoyés comme string via PDO, l'utilisation de execute() est donc suffisante dans la plupart des cas.
    Il peut néanmoins être nécessaire de définir les types de données corrects via bindParam() ou bindValue() pour certaines requêtes spécifiques et en fonction de ton SGBD, par exemple pour les types BIGINT ou BOOLEAN, ou pour la clause LIMIT si le mode émulation pour les requêtes préparées est activé (PDO::ATTR_EMULATE_PREPARES).

    Plus de détails :
    https://phpdelusions.net/pdo#methods
    https://phpdelusions.net/pdo#limit
    https://phpdelusions.net/pdo#emulation

  3. #3
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 6
    Par défaut
    parfait, merci beaucoup

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

Discussions similaires

  1. [TP] Dépassement de capacité pour nombre de plus de 32 bits
    Par dr_kain dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 26/10/2006, 23h52
  2. Réponses: 3
    Dernier message: 28/08/2006, 16h14
  3. Réponses: 3
    Dernier message: 23/06/2006, 11h58
  4. Choix d'un SGBDR pour la préparation d'un cours
    Par jcontami dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 21/09/2004, 16h40
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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