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é et $_GET


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Par défaut Sécurité et $_GET
    Salut,

    Pour le moment j'évite de trop utiliser les $_GET dans mon application PHP, parce que je manque de compétences dans la sécurisation de ces variables. Ce que je fais pour le moment, c'est passer juste des paramètres numériques (comme "test.php?ajout=1"). Et après je fais ce test avant de continuer le traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET['ajout']) && ($_GET['ajout'] == 1) && is_numeric($_GET['ajout']))
    Est ce que vous croyez que cela est suffisent?
    Si dans le futur je suis obligé d'utiliser les variables string vous me suggérez quelle ressource pour être sure que c'est bien sécurisé?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    C'est pas forcément non sécurisé de passer des string comme variable dans l'URL. Cela dépend surtout à quoi te sert cette variable.

    Il faut faire en sorte à la réception de la variable que celle-ci, même si elle n'est pas ce qu'on attend, ne puisse pas nuire à ton script.

    Ou si tu peux connaître à l'avance ce qu'elle peut contenir tu peux faire un tableau des valeurs autorisées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab = array('valeur1', 'valeur2', 'valeur3');
     
    $get_var = isset($_GET['var']) && in_array($_GET['var'],$tab) ? $_GET['var'] : 'valeur par defaut';

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Salut,

    il n'y a pas de règle ultime de sécurité, mais plutôt des bonnes pratiques à prendre en compte :

    1) Si ta variable est utilisée pour une requête SQL, penses à la traiter avec une fonction php afin d'enlever tout caractère dangereux (addslashes, ...).

    2) Si la variable sert à faire une sélection sur un ID, il faut bien tester que l'enregistrement correspondant existe

    3) Comme l'a dis ABCIWEB, si pour certaines variables tu imposes des valeurs spécifiques, il faut bien tester leur validité.

    De toute façon, que tu passes tes variables en GET ou en POST, un utilisateur pourra toujours changer leur valeur. Il faut donc dans tous les cas mettre en place ce côté contrôle des données

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    A ta place, je ferais dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ajout = 0;
    if(isset($_GET['ajout'])) { $ajout = intval($_GET['ajout']); }
    if($ajout === 1) {....
    C'est rapide, lisible, passé en int pour du controle directe avec le strictement égale, et ça suffira
    Ce que tu as fait est bon aussi.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par nextdev Voir le message
    A ta place, je ferais dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ajout = 0;
    if(isset($_GET['ajout'])) { $ajout = intval($_GET['ajout']); }
    if($ajout === 1) {....
    C'est rapide, lisible, passé en int pour du controle directe avec le strictement égale, et ça suffira
    Ce que tu as fait est bon aussi.
    On peut le faire en une ligne avec les opérateurs ternaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ajout = isset($_GET['ajout']) ? intval($_GET['ajout']) : 0;
    Concernant le comparateur strict "===" qui compare le type de la variable en plus de sa valeur, dans ton exemple ce n'est pas nécessaire puisque tu castes ta variable en entier et que la valeur par défaut est également un entier, on est donc certain du type

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    jte pari que ton code est moins rapide, également avec un simple ==
    Et pour encore meilleur perf, tu conserves que la variable $_GET['ajout'], et avec test empty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(empty($_GET['ajout'])) { $_GET['ajout']=0; }else{ $_GET['ajout']=intval($_GET['ajout']); }
    if($_GET['ajout'] === 1) {....

  7. #7
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Attention au comportement de intval() cependant.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( intval("5bis") == 5 )
      echo "Ce test est vrai !";

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par nextdev Voir le message
    jte pari que ton code est moins rapide, également avec un simple ==
    Et pour encore meilleur perf, tu conserves que la variable $_GET['ajout'], et avec test empty
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(empty($_GET['ajout'])) { $_GET['ajout']=0; }else{ $_GET['ajout']=intval($_GET['ajout']); }
    if($_GET['ajout'] === 1) {....
    C'est pas impossible mais c'est tellement infime que je préfère la lisibilité. De toutes façons c'est pas à ce niveau là qu'on optimise un script

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par Finality Voir le message
    1) Si ta variable est utilisée pour une requête SQL, penses à la traiter avec une fonction php afin d'enlever tout caractère dangereux (addslashes, ...).
    Petite précision,

    ...si ta variable est utilisée pour une requête SQL, penses à la traiter impérativement avec mysql_real_escape_string si tu utilise mysql ou mysqli ou fais une requête préparée si tu utilise PDO.

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

Discussions similaires

  1. La Sécurité dans Access
    Par Maxence HUBICHE dans le forum Sondages et Débats
    Réponses: 81
    Dernier message: 24/06/2007, 02h07
  2. Réponses: 8
    Dernier message: 13/03/2007, 10h40
  3. [Sécurité] $_GET : sécurisé ?
    Par Metallic-84s dans le forum Langage
    Réponses: 9
    Dernier message: 28/02/2006, 12h11
  4. [TomCat][sécurité]config fichier web.xml
    Par liomac dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 24/09/2003, 16h46
  5. Pb de sécurité
    Par xtrips dans le forum Débuter
    Réponses: 6
    Dernier message: 16/04/2003, 08h50

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