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 :

Coder de manière sécurisée


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut Coder de manière sécurisée
    Bonjour,

    Je viens de retrouver plusieurs projets que j'avais développé étant étudiant il y a quelques années et je rencontre un soucis majeure.
    A l'époque ou je codais, je récupérer les valeurs de variables passées par les URL avec la simple syntaxe suivante :
    URL : www.monsite.fr/modele.php?nompage=accueil
    Sur la page modele.php je récupérais la valeur avec cette ligne :
    include($nompage);

    Tout cela fonctionnait très bien puisque register_global était alors à On

    Mais je viens de lire un article qui précise que depuis une version de PHP supérieure à celle de mes début, par défaut register_global est passé à Off.
    Cela pour des raisons de sécurité que je comprends parfaitement.

    Donc me conseillez vous de changer tout mon code, de chaque page, sois plus de 80 facile, en remplaçant mes variables par $_GET["nomdelavariable"] par exemple ??
    Cela me prendrai un temps fou !!

    Y aurait-il un moyen plus facile pour changer tout cela sans devoir passer sur chacuns des noms de variable ??
    Ou peut être une instruction qui indique cela juste en début de script ?

    Si vous avez des avis ou critiques à m'apporter sur l'importance de rester à On ou Off pour register_global je suis preneur !!

    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    le plus simple est de repasser l'enregistrement des globales à on, tant que c'est possible

    sinon, pour faire un tout petit peut plus "sécurisé", tu laisses off, tu fais la liste des variables que tu passe par url, et tu ajoutes un bout de code qui les enregistres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $attendues = array( 'nombre', 'query', 'id' );
    foreach( $attendues as $it )
    {
      $$it =  isset( $_REQUEST[$it] )? $_REQUEST[$it] : null;
    }
    l'avantage c'est que tes variables sont crées quand même (attention toutefois, puisque tu récupère la portée des variables de l'endroit ou tu poses ce hack ), que tu ne crées que les variables que tu attends, c'est a dire que tu n'as plus a craindre l'écrasement d'une variable "à toi" par une variable enregistrée automatiquement.

    L'inconvénient c'est que ça ne protège en rien contre, par exemple une injection SQL.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Attention tout de même si tes applications sont vouées à être accessible depuis internet.
    Register global ou non , utiliser une variable sans l'avoir au préalablement testé est très dangereux.

    Dans ton cas rien n'empèche un utilisateur d'inclure son propre script à la place de ta page. (voir article ici)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Par défaut
    Salut,

    J'ai eu exactement le même problème que toi.

    Perso j'ai repassé mon Register_Global à "On" et pour mes nouveaux sites j'utilise le GET, POST et SESSION plus que jamais . Et comme l'a précisé Grunk, tant que tes variables sont testées, tu ne risques plus grand chose.

    +

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Bonjour,


    Merci à tous pour ces réponses aussi rapidement !!

    Quitte à tout reprendre le code, autant le faire correctement en codant avec register_global à Off, puisque de toute façon les hébergeurs l'auront peut être désactivé également.

    gene69
    Je n'ai pas tout compris l'utilité de ton code et si cela est vraiment sécurisé comme tu l'as écrit.. ?

    grunk
    Mes applications sont destinées au Web donc la sécurité est fortement recommandée.
    Quand tu dis qu'utiliser une variable sans l'avoir testée est très dangereux, tu veux dire avec la fonction isset() ? Voir si elle existe bien ?
    En tout cas ton article en lien est très intéressant !!

    A tous, si je dois reprendre chacunes des variables avec GET, connaissez vous un moyen pour le faire automatiquement ? (soft ou commande) sans devoir ouvrir chacun des fichiers ?

    Quelle est vraiment la différence entre le GET et le POST ? Je ne vois pas vraiment la différence.

    Merci d'avance pour vos réponses.

  6. #6
    Membre éclairé Avatar de Colbix
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 266
    Par défaut
    Citation Envoyé par sebphp Voir le message
    grunk
    Mes applications sont destinées au Web donc la sécurité est fortement recommandée.
    Quand tu dis qu'utiliser une variable sans l'avoir testée est très dangereux, tu veux dire avec la fonction isset() ? Voir si elle existe bien ?
    En tout cas ton article en lien est très intéressant !!
    A mon avis, par test, il veut dire qu'il faut éviter les injections et éviter que les utilisateurs puissent modifier ces variables directement dans la bar d'adresse et permettre de voir des information qu'ils ne devraient pas voir.

    Par exemple si tu as dans ton adresse (...)?articleId=5 pour afficher une article de journal dont l'id en db est 5.
    Un utilisateur peut changer ce 5 en 6 et voir l'article dont l'id est 6 alors qu'il n'as pas les droits.
    Tout ça pour dire que sur chaque page, tu dois vérifier l'intégrité des variables qui arrivent de "l'extérieur" de ton programme.

    Citation Envoyé par sebphp Voir le message
    A tous, si je dois reprendre chacunes des variables avec GET, connaissez vous un moyen pour le faire automatiquement ? (soft ou commande) sans devoir ouvrir chacun des fichiers ?
    Tu peux utiliser le code de gene69 .

    Dans tous les cas, tu devras parcourir toutes tes pages et identifier les variables qui viennent du $_GET.
    Après ça, il faut en effet les traiter et les initialiser correctement. Je vais un peu réfléchir à la question.

    Citation Envoyé par sebphp Voir le message
    Quelle est vraiment la différence entre le GET et le POST ? Je ne vois pas vraiment la différence.
    Je t'invite à lire ce post.
    En gros :
    $_GET = Toutes les variables qui sont passer dans la barre d'adresse (plus d'info ici).
    $_POST = C'est dans le header des paquets http envoyé au serveur par le client (plus d'info ici).

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonjour,

    GET : variable dans l'url... du type index.php?var=1 $_GET['var']

    POST : variable soumise par un formulaire $_POST[nomduchamps]

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

Discussions similaires

  1. Sécuriser mes WS publics avec Kerberos (de manière non intrusive)
    Par Akamanouche dans le forum Services Web
    Réponses: 2
    Dernier message: 29/08/2011, 11h27
  2. Stockage des données de manière sécurisée
    Par fedora8 dans le forum Optimisations
    Réponses: 5
    Dernier message: 26/06/2011, 11h19
  3. [Besoin Conseils] Coder de manière élégante
    Par Mathusalem dans le forum Langage
    Réponses: 3
    Dernier message: 29/01/2006, 18h42
  4. Documentation sur la manière de travailler avec le XML en java
    Par DelPiero62 dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/03/2003, 09h16
  5. Sécuriser les Métadata IB en utilisation mono ?
    Par ADN75018 dans le forum Débuter
    Réponses: 23
    Dernier message: 31/01/2003, 13h43

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