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 :

Prepare et Injection SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut Prepare et Injection SQL
    Salut all,

    Je me pose la question si l'utilisation de requete prepare empeche/parre toutes injections SQL ?
    (par prepare j'entends $mysqli->prepare ou mysqli_prepare)

    Merci pour vos infos.

  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
    Par défaut
    Ce n'est pas la fonction prepare() en elle même qui empêche les injections, c'est le fait de ne pas mettre les données potentiellement dangereuse dans la requête mais de les passer en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_prepare('SELECT colonne FROM table WHERE colonne = ' . $_POST['id']); // pas bien
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Merci sabotage pour ta reponse, mais je parlais dans des conditions correctes d'utilisation
    (genre l'exemple http://php.net/manual/fr/mysqli.prepare.php)
    Donc si on fait comme l'exemple, ca empeche les injections ?

  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
    Par défaut
    Avec Mysql, il vaut mieux aussi desactiver l'emulation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ce n'est pas la fonction prepare() en elle même qui empêche les injections, c'est le fait de ne pas mettre les données potentiellement dangereuse dans la requête mais de les passer en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_prepare('SELECT colonne FROM table WHERE colonne = ' . $_POST['id']); // pas bien
    Mais en quoi le fait de passer les données potentiellement dangereuses en paramètre fait qu'elles ne le sont plus ? Et ne le sont-elles plus du tout, ou seulement un peu moins ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il serait bon de lire la doc :


  7. #7
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    Citation Envoyé par Supracode Voir le message
    Mais en quoi le fait de passer les données potentiellement dangereuses en paramètre fait qu'elles ne le sont plus ? Et ne le sont-elles plus du tout, ou seulement un peu moins ?
    Si j'ai tout compris (lol)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_prepare('SELECT colonne FROM table WHERE colonne = ' . $_POST['id']);
    Pas glop, car utilisation du $_POST['id'] directement dans le prepare.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysqli_prepare('SELECT colonne FROM table WHERE colonne = ?');
    $con->bind_param('i', $_POST['id']);
    Glop, car le $_POST['id'] est en dehors de la cmd sql.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Nom : glop.1283268437.thumbnail.jpg
Affichages : 296
Taille : 31,0 Ko

  9. #9
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    il serait bon de lire la doc :
    D'accord, c'est affirmatif :
    . Si votre application utilise exclusivement les requêtes préparées, vous pouvez être sûr qu'aucune injection SQL n'est possibl
    Mais pas très explicite pour autant.

    Réceptionnons une variable pirate $_GET['cadeau']="DELETE 'everything' FROM 'la_totale' ".


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $stmt = $dbh->prepare ("INSERT INTO REGISTRY (cadeau) VALUES (:cadeau, :value)");
    $stmt->bindParam(':cadeau', $_GET['cadeau']);
    Pourquoi le fait d'utiliser une requête préparée neutralise-t'il la valeur piégée de la variable $_GET['cadeau'] ?
    Je ne me représente pas le truc.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Essaye, pour voir...

Discussions similaires

  1. [Sécurité] Injection SQL
    Par Michel_57 dans le forum Langage
    Réponses: 17
    Dernier message: 19/04/2006, 00h25
  2. Sécurité - Inject SQL et %
    Par bigsister dans le forum Requêtes
    Réponses: 14
    Dernier message: 01/04/2006, 09h34
  3. Réponses: 4
    Dernier message: 13/02/2006, 11h34
  4. Réponses: 20
    Dernier message: 03/02/2006, 10h55
  5. Réponses: 10
    Dernier message: 25/10/2005, 16h09

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