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 :

Protection POST - substitution de type de champs


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut Protection POST - substitution de type de champs
    Coucou,

    Une petite question me passait par là.

    J'ai l'habitude de protéger mes champs par htmlspecialchars() et real_escape_string() sur des input de type texte (et textarea) vu que les données sont saisies par des utilisateurs.

    Faut-il aussi faire de même pour les input de type radio,checkbox et select ?
    En gros, est-il possible qu'un utilisateur puisse "par je sais quel moyen" transformer le champ de notre formulaire en un autre champ et saisir "ce qu'il veut" ?...

    Parce que bon, imaginons, je protége le nom et le prénom.
    Le troisième champs est une liste (select) d'âges allant de 11 à 121 ans...

    Par un prodige que je ne connais pas "peut être un logiciel qui se surcouche au navigateur", le mec change "à la volée le formulaire", m'en fait un champ de saisie... et au lieu de m'envoyer un simple entier (que je ne testerais pas, naif que je suis étant persuadé que via une liste on ne peut rien m'envoyer de néfaste) m'envoie un truc pas sympa.

    En gros dans mon délire paranoïaque :
    - faut il tester tout ce qui est envoyé par POST, même les champs select, radio, checkbox et hidden ?

    - peut-on substituer le type d'un champ et envoyer ça au serveur "naturellement" ? Si oui... est-ce que l'inventeur de ça est en prison :p ?

    Merci ^^

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Lost In Translation Voir le message
    Coucou,

    Une petite question me passait par là.

    J'ai l'habitude de protéger mes champs par htmlspecialchars() et real_escape_string() sur des input de type texte (et textarea) vu que les données sont saisies par des utilisateurs.

    Faut-il aussi faire de même pour les input de type radio,checkbox et select ?
    En gros, est-il possible qu'un utilisateur puisse "par je sais quel moyen" transformer le champ de notre formulaire en un autre champ et saisir "ce qu'il veut" ?...

    Parce que bon, imaginons, je protége le nom et le prénom.
    Le troisième champs est une liste (select) d'âges allant de 11 à 121 ans...

    Par un prodige que je ne connais pas "peut être un logiciel qui se surcouche au navigateur", le mec change "à la volée le formulaire", m'en fait un champ de saisie... et au lieu de m'envoyer un simple entier (que je ne testerais pas, naif que je suis étant persuadé que via une liste on ne peut rien m'envoyer de néfaste) m'envoie un truc pas sympa.

    En gros dans mon délire paranoïaque :
    - faut il tester tout ce qui est envoyé par POST, même les champs select, radio, checkbox et hidden ?

    - peut-on substituer le type d'un champ et envoyer ça au serveur "naturellement" ? Si oui... est-ce que l'inventeur de ça est en prison :p ?
    Merci ^^
    Indiscutablemnt la réponse est OUI !!

    Mais il faudrait ouvrir le débat sur la sécurité, et je crois avoir lu que nos "Rédacteurs" préparent un TOPO sur le sujet,

    Je ne veux donc pas trop m'étendre ici.

    Cependant je dirais plus on interesse de monde , (par exemple le site WEB de l'AFP) plus les grosses pointure en matiére de Hackage vont tenter leur chance.

    Plus on est modeste, moins on intéresse les Hackers (les vrais) pas plus de 2000 dans le monde !

    Reste donc pour nos sites WEB a nous protéger des "bricoleurs" et ça
    c' est plus facile.

    Quand tes formulaires sont des POST rien n' apparait dans la bare d' adresse.
    Par contre si tes formulaires sont en GET dans la barre d' adresse, tu as toutes les infos, même les hidden

    Admetons que j'ais un FORM avec un seul chanp SELECT par exemple
    dont le nom soir langue

    J'aurais bien dans la barre d'adresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.monsit.com/xxx.php?langue=france
    Tu vois que je peux me faire sur mon micro un mini HTML qui aurait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="http://www.monsit.com/xxx.php?langue=0xh28Ck12<exjava>for httpdeal">et voila </a>
    Ors sache que le POST est mieux protégé, mais pas tant que cela

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Quelques bonnes pratiques :
    • Tester la valeur de chaque champ du POST afin qu'elle matche les valeurs que tu attends.
    • Ne jamais utiliser la fonction extract.
    • Pour ce qui est des accès BD, il est préférable d'utiliser une solution d'abstraction de BD
    En gros, il faut te dire que TOUT peut être hacké et partir de ce principe là (et pas l'inverse en te disant que tout est sécurisé sauf telle ou telle fonction )

  4. #4
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Alors non ça ne sera pas le site de l'AFP. C'est un jeu. Et qui dit jeu, dit "je veux être le meilleur" et dans ce cas là, certains sont prêts à vendre père et mère.

    Alors en général je teste les champs mais c'est vrai que j'ai pas l'habitude de tester les champs où l'on ne saisit pas manuellement. Maintenant, c'est vrai que c'n'est pas non plus "plus long".

    J'utilise rarement $_GET dans un formulaire... mais je l'utilise, donc en général j'ai tendance à protéger, mais peut être pas assez.

    J'vais repasser dans mon code pour voir si j'ai rien oublié.

    * Tester la valeur de chaque champ du POST afin qu'elle matche les valeurs que tu attends.
    * Ne jamais utiliser la fonction extract.
    * Pour ce qui est des accès BD, il est préférable d'utiliser une solution d'abstraction de BD
    Alors pour le point 1, promis j'vais finir de le faire ^^
    Pour le point 2, je ne l'utilise jamais
    Pour le point 3, MySQLi - que j'adore - me semble au poil pour ça

    ... euh, du coup, il faut aussi protéger ce qui est mis en session ?
    Nan parce que bon, imaginons que je mette :
    $_SESSION['var_de_mon_choix_qui_vient_de_mon_imagination'] = 'toto';...
    Y a moyen que Pinguins vienne et me la modifie en 'tata' ? Parce que dans c'cas là, faudrait que je fasse aussi gaffe quand je récupère les valeurs de ma session d'une page à une autre...

    Alors, alors ?

    Merci

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    ... euh, du coup, il faut aussi protéger ce qui est mis en session ?
    Nan parce que bon, imaginons que je mette :
    $_SESSION['var_de_mon_choix_qui_vient_de_mon_imagination'] = 'toto';...
    Y a moyen que Pinguins vienne et me la modifie en 'tata' ? Parce que dans c'cas là, faudrait que je fasse aussi gaffe quand je récupère les valeurs de ma session d'une page à une autre...
    Alors, alors ?
    Décidément dur dur de continuer sans faire le tour de la question sécuritée
    En tout cas tu fais comme tu veux, et je te réponds clairement sur cette derniére question,

    LORSQU'UN VISITEUR SE DELOGUE OU EST INACTIF PLUS DE XXX secondes

    1) ON NE PEUT SUPRIMER UN COOKIES mais on peut réécrire dedans, donc remets en écriture des valeurs bidons ,pour tes valeurs "sensibles"
    2) Vide sa session !!

    Voici les précautions élémentaires a respecter sur ce point,

    Pour le reste je te conseilles , faisant un site de jeux, de lire l'exellent livre
    Securité PHP5 et MYSQL chez Eyrolles

  6. #6
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Pour le delog, j'ai pas de soucis. J'explose la session...

    Mais est-ce que lui il peut modifier les données de sa session à la volée ?
    Parce que si c'est oui... dans c'cas là, effectivement, j'ai tout intérêt à éviter qu'il foute des caractères à la con (car à part une faille XSS je vois pas) pour foutre le bordel.

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Lost In Translation Voir le message
    Pour le delog, j'ai pas de soucis. J'explose la session...

    Mais est-ce que lui il peut modifier les données de sa session à la volée ?
    T' explose ça c' est parfait 100%
    Pour le reste c'est NON sois tranquille !! mais attention, c'est toi qui remplis
    les valeurs de session, alors si une des valeur viens d'un GET ou d'un POST, on en a parlé donc TOUT EST OK

  8. #8
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Oki Doki.

    Merci Fox et Trotters pour l'échange et vos réponses.

    J'ai des trucs à corriger du coup mais c'est positif en tout cas.

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

Discussions similaires

  1. Variables POST : connaître le type du champ source
    Par Sayrus dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2007, 13h26
  2. [Struts][Conseil] type de champs ActionForm
    Par Sniper37 dans le forum Struts 1
    Réponses: 10
    Dernier message: 12/04/2005, 15h43
  3. Changement type de champ: ORA-01439
    Par PATMOR dans le forum Oracle
    Réponses: 8
    Dernier message: 12/02/2005, 16h14
  4. [Oracle][Delphi 7] Problème type de champ
    Par tiennos dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/07/2004, 10h17
  5. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08

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