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 :

Ajouter un formulaire à une page pour tromper register_global


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut Ajouter un formulaire à une page pour tromper register_global
    Bonjour,

    Dans la série des questions de sécurité inutilo-farfelue, c'est à dire à l'image des pirates, j'en ai une pas piquée des hannetons.

    Imaginons que register_global soit à "on" et que $_GET['var'] ou $_POST['var'] fonctionne de la même manière que $var toute seule.

    Imaginons qu'à réception de la variable transmise par l'url, vous fassiez, avant l'insertion dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var=intval($_GET['var'])
    Là vous êtes blindé, ok.

    Mais maintenant, imaginons qu'un petit futé bidouille un formulaire pointant vers votre page web, alors qu'initialement elle n'en comprend pas (ou même si elle en comprend un, après tout).

    Et imaginons qu'il insère dans un input de ce formulaire, dont la méthode est POST, le value suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="var" value="la requête qui tue pour tout griller">
    Là votre page va réceptionner une variable $_GET['var'] + une variable $_POST['var'].

    Donc même si vous faîtes $var=intval($_GET['var']); qu'est ce qui garantie, puisque register_global est à on, que ça ne va pas finalement être la $_POST['var'] contenant la requête d'attaque qui va être insérée ?

    Bien sur la parade, si parade est nécessaire, est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['var'])) {$var=intval($_GET['var']);}
    if(isset($_POST['var'])) {$var=intval($_POST['var']);}
    Là dans tous les cas on est blindé, je crois.

    Mais est-ce vraiment utile de faire cela, telle est la question

  2. #2
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par JackBeauregard
    Donc même si vous faîtes $var=intval($_GET['var']); qu'est ce qui garantie, puisque register_global est à on, que ça ne va pas finalement être la $_POST['var'] contenant la requête d'attaque qui va être insérée ?
    Ben si ton code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = intval($_GET["var"]);
    Pourquoi est-ce que PHP prendrait $_POST["var"] ?

    Citation Envoyé par JackBeauregard
    Bien sur la parade, si parade est nécessaire, est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['var'])) {$var=intval($_GET['var']);}
    if(isset($_POST['var'])) {$var=intval($_POST['var']);}
    Là dans tous les cas on est blindé, je crois.
    Non, là justement tu assures au "pirate" que tu prendras bien compte de la valeur qu'il t'envoie. Et même qu'elle aura priorité sur ta variable GET.

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Non, là justement tu assures au "pirate" que tu prendras bien compte de la valeur qu'il t'envoie. Et même qu'elle aura priorité sur ta variable GET.
    Oui tu as raison, dans une autre page j'avais mis un else avec une valeur par défaut et non deux if. Mea Culpa.

    Ben si ton code est
    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $var = intval($_GET["var"]);
    Pourquoi est-ce que PHP prendrait $_POST["var"] ?
    C'est bien ce que je me demande aussi. Register_global à "on" réserve tellement de surprise en confondant même les variables POST ou GET avec celles en session, que je préfère être méfiant.
    Mais ce qui est bizarre, c'est que tout en les confondant, ils semble savoir faire la différence si tout est explicitement précisé, soit faire le choix entre $_GET et $_POST. Mais si rien n'est précisé, php confond tout si register_global est à "on". Si mes constatations sont bonnes.

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par JackBeauregard
    Oui tu as raison, dans une autre page j'avais mis un else avec une valeur par défaut et non deux if. Mea Culpa.



    C'est bien ce que je me demande aussi. Register_global à "on" réserve tellement de surprise en confondant même les variables POST ou GET avec celles en session, que je préfère être méfiant.
    Mais ce qui est bizarre, c'est que tout en les confondant, ils semble savoir faire la différence si tout est explicitement précisé, soit faire le choix entre $_GET et $_POST. Mais si rien n'est précisé, php confond tout si register_global est à "on". Si mes constatations sont bonnes.
    Non il ne le confond pas il y a des ordre de priorité. Dans la version 4.x de php il y avait un élément permettant d'indiquer dans le php.ini mais dans le 5.x je ne vois pas cette option. c'étais du genre PGCS .Post Get Cookie Session
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #5
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Bon ça m'aura toujours permit de penser à la notion de priorité, ça peut éviter des mauvaises surprises.

    Merci et si vous avez d'autres choses à rajouter, n'hésitez pas.

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

Discussions similaires

  1. [Conception] comment créer une page pour modifier un Titre de site
    Par mecmec dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/11/2006, 01h39
  2. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 22h58
  3. comment rafraichir une page pour voir l'image
    Par jonathan.ohayon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/05/2006, 22h57
  4. Ajout d'élément à une page
    Par Ditch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/03/2005, 12h45

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