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 :

Récupération "automatique" des $_POST $_GET. C'est bien ou mal ? [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de greg91
    Homme Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut Récupération "automatique" des $_POST $_GET. C'est bien ou mal ?
    Bonjour à tous,

    J'utilise depuis quelques semaines un fichier que j'inclus dans mes scripts qui doivent récupérer des données depuis les tableaux super globaux.

    Ce bout de code me fait les htmlentities et initialise les variables en fonction du nom utilisé.
    Cela m'évite l'étape fastidieuse de la récupération des variables une à une. Je gagne vraiment du temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    /* Filtre $_POST */
    if ( !empty( $_POST ) ) {
    	foreach( $_POST as $key => $data ) { //Parcours le tableau
    		$data = trim( $data ); //Supprime les espaces
    		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		${ $key } = $data;
    		}
    	}
     
    /* Filtre $_GET */
    if ( !empty( $_GET ) ) {
    	foreach( $_GET as $key => $data ) { //Parcours le tableau
    		$data = trim( $data ); //Supprime les espaces
    		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		${ $key } = $data;
    		}
    	}
     
    /* Filtre $_FILE */
    if ( !empty( $_FILE ) ) {
    	foreach( $_FILE as $key => $data ) { //Parcours le tableau $_POST
    		$data = trim( $data ); //Supprime les espaces
    		$data = htmlentities( $data, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		$key = htmlentities( $key, ENT_QUOTES, 'UTF-8' ); //Remplace les caractères interprétables
    		${ $key } = $data;
    		}
    	}
    Jusqu'ici cela marche bien mais je me demandais si c'etait vraiment une bonne chose.
    - Bien sur, il faut faire gaffe de ne pas utiliser des noms de variables qui peuvent être créé par ce script.
    - Un attaquant pourrais surcharger les superglobal aussi (je ne sais pas si ce type d'attaque est courante)

    Donc ma question est :
    Est-ce que je continu à procéder comme ça ?
    Ou est-ce que je me plante devrai arrêter ?

  2. #2
    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 : 42
    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
    Ce que tu fait reviens à utiliser (à peut de chose près) register_global on qui est fortement déconseillé (voir même supprimé des dernière version de PHP).

    Je prend un exemple simple , dans ton site tu as par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($admin == 1)
       donation_grunk(5000);
    else
       echo ' vous devez être admin';
    Suffit qu'un utilisateur appel cette page avec l'argument &admin=1 et op il passer outre la protection.
    C'est un cas un peu exagéré mais avec ce que tu fais n'importe qui peut intéragir avec ton script.

    Ce qu'il est en revanche possible de faire c'est par exemple appliqué un traitement sécurisant certaines données via array_walk.

    Note : htmlentites se fait à l'affichage pas avant traitement , ou insertion bdd
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de greg91
    Homme Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut
    Autant faire une fonction qui nettoie directement ta variable. (une par une)
    Oui c'est comme cela que je faisait mais je pensais gagner du temps.

    Ce que tu fait reviens à utiliser (à peut de chose près) register_global on
    Effectivement je n'avait pas vue les choses comme ça !

    J'avais fais ça pour un formulaire dont je ne connaissait pas le nombre de champs (paramétrable par l'utilisateur). Je me suis cru très malin mais je me trompais

    Merci pour vos réponses.

  4. #4
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    La seule chose qui me vient à l'esprit c'est:

    Quelqu'un peut envoyer des données POST/GET que tu n'as pas dans tes scripts à la base et toi tu les traiteras automatiquement alors que tu ne les utiliseras pas.

    Autant faire une fonction qui nettoie directement ta variable. (une par une)

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

Discussions similaires

  1. mettre des quote automatiquement
    Par mussara dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 10h41

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