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

Langage PHP Discussion :

[Sécurité] [SGBD] Injections SQL, addslashes suffit ? [Fait]


Sujet :

Langage PHP

  1. #1
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut [Sécurité] [SGBD] Injections SQL, addslashes suffit ?
    Bonjour,

    Tout est dans le titre :
    Je voudrais savoir si addslashes suffit pour se prémunir de toute injection SQL.

    Merci

  2. #2
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    http://www.php.net/manual/fr/function.mysql-real-escape-string.php

    Regarde justement le chapitre sur les injections SQL

  3. #3
    Membre actif

    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 264
    Points
    264
    Par défaut
    J'ajouterais strip_tags() !

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Thanks.
    Je vais de suite implémenter le quote_smart.

    Sinon je pense que strip_tags est plus adapté à Cross Scripting qu'aux injections SQL non ?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    non, addslashes ne suffit pas.

    Tout depend en fait de ta base de données... si tu as une version de MySQL < 4, alors addslashes devrait suffire... mais si tu as une version superieure ou alors que tu as PostGres ou SQL Server, il te faut verifier que tes champs ne contiennent pas d'autres caracteres "spéciaux".

    Par exemple le caractere ;
    ou encore "UNION"

    en fait, il faut que tu verifie le type de la variable.

    Quand tu construit une requete, tu fait en général :

    quand le champ est une chaine

    et
    quand le champ est un nombre.

    Pour le 1er cas, addslashes suffit.
    Pour le second, il faut que tu verifie que le champ est bien un nombre (avec is_numeric par exemple) ou encore que tu le "force" en nombre (avec $var+=0; par exemple) sinon tu t'expose aux attaques par ; et UNION.

    Exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = "3; DROP TABLE user;"
    SELECT * FROM table WHERE ID = $var
    donne : SELECT * FROM table WHERE ID = 3; DROP TABLE user;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = "3 UNION SELECT password FROM user WHERE id=1";
    SELECT champ FROM table WHERE ID = $var
    donne : SELECT champ FROM table WHERE ID = 3 UNION SELECT password FROM user WHERE id=1

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Merci pour cette explication qui me montre que le addslashes n'est pas suffisant.

    Mais si je fais tout le temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE id = '$id'...
    Aïeuuu... tapez pas ! je sais que je compare des choux et des carottes, ici une colonne de type int et un varchar, mais ca résoud très grandement ces ; et autre UNION...

  7. #7
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Un peu naze je trouve perso les sgbd qui gèrent les multi requètes avec ; c'est une porte ouverte a des tas de failles de sécurité d'injection sql de leur part.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  8. #8
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Tu peut ajouter ces tests la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    htmlspecialchars( )
    stripslashes( )
    avec addslashes( )
    ou faire des tests plus cible comme:
    cf php.net pour les precisions ou tuto sur sql injection

    bon dev'

    note: htmlspecialchars( ) ne sert pas vraiment à empecher l'injection sql (enfin je crois pas) c'est plutot pour les accents et les caracteres speciaux du meme genre. Mais c'est un bonus.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    A propos de htmlspecialchars, quel est le lien avec SQL (et dans mon cas MySQL) ?

  10. #10
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    htmlspecialchars() remplace ' par son équivalent HTML si tu lui passe un flag particulier je crois, c'est le seul rapport que je vois.

    Dans tous les cas mysql_real_escape_string() est la meilleur fonction pour protéger tes requètes.

    Il existe une denrièere (et parfaite) solution : la préparation de requète. Je sais que mysqli gère ca donc si tu as MySQL 4.1 installe l'extension MySQLi
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ok merci à tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/02/2006, 11h34
  2. Réponses: 20
    Dernier message: 03/02/2006, 10h55
  3. [SGBD] requête sql en php pour mysql
    Par Thierry8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/09/2005, 22h31
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43
  5. Connexion SGBD Oracle-SQL langage C/C++
    Par K2004 dans le forum Interfaces de programmation
    Réponses: 4
    Dernier message: 10/02/2004, 19h01

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