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 :

besoin d'aide pour comprendre les injections sql


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut besoin d'aide pour comprendre les injections sql
    Bonjour,
    je souhaite protéger mon site contre les injections sql et j'ai regardé cette page pour comprendre le fonctionnement.
    http://www.linux-pour-lesnuls.com/injection.php
    Je reprends les exemples de ce site:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SELECT * FROM users WHERE utilisateur = '$login' AND motdepasse = '$password'");
    si dans le champ correspondant au login on met:
    la requete devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SELECT * FROM users WHERE utilisateur = '' OR 1=1"); //' AND motdepasse = 'password'");
    password étant le contenu de la variable $password.

    Pourtant quand je le fais, le server mysql interprete la requete ainsi:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM users WHERE utilisateur = '' OR 1=1"); //' AND motdepasse = 'password'

    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL
    server version for the right syntax to use near '"); //' AND motdepasse = 'password'' at line 1
    Le probleme c'est que mysql tente d'interpreter "); // alors que c'est à apache de le faire.
    Pourquoi le server mysql ne l'interprete-t-il pas ainsi?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM users WHERE utilisateur = '' OR 1=1

    Merci pour vos explications.
    Cassy

    [edit]merci julp pour avoir réediter mon post...j'y penserais la prochaine fois.
    effectivement c'est plus clair bien qu'il y ait encore aucune reponse [edit]

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    C'est pas 2 slashs pour mettre un commentaire en fin de requête, mais un dièse.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    sauf que c'est bien // pour un commentaire php.
    le ferme le

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    tu dois avoir les magic quotes d'activés ce qui donne un fois posté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SELECT * FROM users WHERE utilisateur = '' OR 1=1\"); //' AND motdepasse = 'password'");
    Bye

  5. #5
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Citation Envoyé par cassy
    sauf que c'est bien // pour un commentaire php.
    le ferme le
    Je ne parlais pas d'un commentaire php, mais d'un commentaire SQL.

    Et puis # est aussi un délimiteur de commentaire en php.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SELECT * FROM users WHERE utilisateur='' OR 1=1 # AND motdepasse = 'password'");

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    le commentaire SQL c'est -- (suivi d'un espace avec MySQL).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mysql_query("SELECT * 
      FROM users 
      WHERE utilisateur = '$login' 
        AND motdepasse = '' OR 1=1 -- '");
    Echapper les apostrophes (comme il faut toujours faire), ou même ces immondes magic_quotes, te protègerait :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    mysql_query("SELECT * 
      FROM users 
      WHERE utilisateur = '$login' 
        AND motdepasse = ''' OR 1=1 -- '");

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    ok merci je comprends mieux...
    Le site laissait sous entendre qu'on pouvait executer du code php après le ");
    ce qui n'a pas l'air d'être possible heureusement...
    on peut donc modifier les requetes par sql injection mais pas le traitement qu'il y a derrrière coté apache si j'ai bien compris.

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    PHP n'a pas de raison d'exécuter une variable (sauf s'il y a un eval() dans le script). Par contre, il envoie à MySQL des instructions où apparaissent les variables, d'où le risque d'injection.

    Le même risque existe si PHP envoie des commandes à l'OS avec ``.

  9. #9
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    C'est bizzare cet article, c'est nimp ^^
    A moins que j'aie loupé un truc ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/02/2013, 12h04
  2. Besoin d'aide pour comprendre une requête SQL
    Par MAXJEREM dans le forum SQL
    Réponses: 0
    Dernier message: 12/04/2011, 13h46
  3. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 23h27
  4. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 13h00
  5. Besoin d'aide pour recuperer les fichier d'un projet
    Par barthelv dans le forum Applications et environnements graphiques
    Réponses: 9
    Dernier message: 14/04/2006, 11h47

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