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é] Controler une chaine/Injection SQL/chars étrangers


Sujet :

Langage PHP

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 314
    Points : 265
    Points
    265
    Par défaut [Sécurité] Controler une chaine/Injection SQL/chars étrangers
    salut,

    J'utilise souvent la fonction ereg() pour contrôler les paramètres passés en POST ou en GET dans mes formulaires. Or, la plupart du temps, il s'agit simplement d'empêcher l'injection de code SQL dans mes requêtes qui utilisent ces paramètres ou d'empêcher l'utilisation de caractères qui (pourquoi pas ?) feraient planter ma requête (caractères russes par exemple, caractères d'échappement ???) . J'empêche donc le simple ou le double quote selon le cas, j'autorise seulement les caractères utilisés dans la langue française ou proche (j'entend par là pas de caractères russes, japonnais, chinois etc. ). mais est-ce suffisant ?

    Voilà ma question :
    J'utilise MySQL, quelle expression régulière correspondrait à :
    "autoriser tous les caractères SAUF ceux susceptibles de permettre une injection SQL ET SAUF ceux qui seraient inconnus de MySQL et qui pourrait faire planter ma requête".

    Comment faîtes-vous ? Pourrais-je me contenter d'un add_slashes() au moment de l'utilisation de mes variables passées en GET ou POST ?

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Selon ce que dit la doc PHP, un appel à mysql_real_escape_string() suffit à éviter les injections SQL. Pas besoin de s'embêter outre mesure, a priori.

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 314
    Points : 265
    Points
    265
    Par défaut
    salut kirkis,

    Merci de ta réponse rapide. En effet je ne connaissais pas cette fonction
    Par défaut j'utiliserais celle-ci désormais
    J'apprends au passage que d'autres caractères peuvent permettre de faire des injections SQL :
    Selon http://fr3.php.net/mysql_real_escape_string :
    NULL, \x00, \n, \r, \, ', " et \x1a.

    Que sont \x00 et \x1a ? est-ce que ça prends en compte les échappement sous unix par ex?

    Seul "défaut" à priori : il faut se connecter à MySQL pour contrôler les variables de formulaire... en terme de performance est-ce que ça a un impact négatif ?

    Comment se comporte MySQL si on lui envoit une chaine avec des caractères chinois par ex ?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Pense à regarder la fonction quote_smart() de la même page de la doc

    Entre nous, si tu souhaites protéger des variables avant insertion dans la BDD, pourquoi te préoccuper de la présence d'une connexion à cette BDD ? Tu l'as forcément, sinon tu ne te poserais pas la question de l'injection !
    Ce défaut est en fait un faux défaut, ne crois-tu pas ?

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2002
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 314
    Points : 265
    Points
    265
    Par défaut
    oui j'avais vu la fonction pas mal en effet.
    En fait il n'y a pas de nouvelle connexion nécessaire c'est vrai mais PHP est quand même obligé d'aller interroger mysql... mais bon j'imagine que la perte de temps douit être négligeable...

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

Discussions similaires

  1. Extraire chiffre d'une chaine en SQL
    Par chillansky dans le forum Langage SQL
    Réponses: 8
    Dernier message: 16/10/2017, 14h47
  2. Affecter une chaine type SQL à un String
    Par obtuli31 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 31/05/2011, 10h24
  3. Réponses: 4
    Dernier message: 11/11/2010, 22h47
  4. Réponses: 7
    Dernier message: 02/11/2009, 14h40
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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