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é] probleme de panier


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut [Sécurité] probleme de panier
    salut, j'ai cree un site sur lequel j'ai un pannier mais bon il marche pas.
    quand j'ouvre le panier il m'ouvre la page avec le tablo ne contenant que la premiere ligne.
    pkoi?
    voici mon code:
    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
    31
    32
    33
    34
    35
    <center>
     
        			<?
       				if (! isset($_SESSION['panier']) )
    				{
     				$_SESSION['panier'] = array();
    				}
    				$produit = $_GET['noprod'];
    				$lib = $_GET['liprod'];
    				$pu=$_GET['pu'];
     
    				echo "<H2>Votre panier</H2><TABLE BORDER=\"1\"><TR><TH>Produit</TH><th>Libelle</th><TH>Quantité</TH><th>Prix unitaire</th><th>Total</th></TR>";	
    				for ($i=0; $i<count($_SESSION['panier']); $i++)
    				{
    				?>
     				<tr>
     				<td><? echo($produit); ?>
     				</td>
     				<td><? echo($lib); ?>
     				</td>
     				<td><input type='integer' name='nom' size='3' value='1'>
     				</td>
     				<td><? echo($pu); ?>
     				</td>
     				<td> 
     				</td>
    				 </tr>			
     
    				<?
    			}
    				echo '</TABLE><a href="index.php?env=1" style="color:red">valider votre commande</a><br>';
    				echo '<a href="index.php?eff=1" style="color:red">effacer le pannier</a><br>';
    				echo '<a href="index.php" style="color:red">retour</a>';
    				?>
    				</center>
    merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut

    Comment veux-tu afficher le contenu du panier ?
    1) Tu ne fais pas session_start();
    2) Tu n'affectes pas le contenu de $_SESSION['panier']
    3) Tu ne tentes d'afficher que le contenu de ta variable GET, pas celui de la session.
    Au passage, tu affiches sans validation ton GET => tu es perméable à une attaque XSS.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    j'ai une session start() tout en haut de la page.
    pour le probleme de menace c pas tres important le site ne sera jamais mis en ligne.
    Sinon je ne comprend pas ce que tu veu en 2).

  4. #4
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Citation Envoyé par vg33
    Au passage, tu affiches sans validation ton GET => tu es perméable à une attaque XSS.
    est ce que tu pourrai développer ou donner un lien stp, je me sens vaguement concerné d'un coup ...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par titoumimi
    Citation Envoyé par vg33
    Au passage, tu affiches sans validation ton GET => tu es perméable à une attaque XSS.
    est ce que tu pourrai développer ou donner un lien stp, je me sens vaguement concerné d'un coup ...
    http://julien-pauli.developpez.com/t...rite/?page=xss

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par zebougha
    Sinon je ne comprend pas ce que tu veu en 2).
    Quand ajoutes-tu à $_SESSION['panier'] le contenu de ton GET ?

  7. #7
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par titoumimi
    Citation Envoyé par vg33
    Au passage, tu affiches sans validation ton GET => tu es perméable à une attaque XSS.
    est ce que tu pourrai développer ou donner un lien stp, je me sens vaguement concerné d'un coup ...
    Pareil que titoumimi !
    De plus, j'ai un probleme de compréhension sur la phrase "tu affiches sans validation ton GET" , c'est a dire ? Il faut verifier que le GET existe ? Verifier sa taille aussi (pour eviter une injection SQL) ?

    merci d'avance

    ++
    ShinJava

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    jamais!
    Comment fait on pour ajouter les donnees a la session panier

  9. #9
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par vg33
    Citation Envoyé par zebougha
    Sinon je ne comprend pas ce que tu veu en 2).
    Quand ajoutes-tu à $_SESSION['panier'] le contenu de ton GET ?
    Oki merci

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    On change de sujet, là...
    Valider ton GET (ou ton POST...) revient à vérifier :
    1) qu'il existe
    2) qu'il ne contient que des caractètes autorisés.
    Exemple d'attaque XSS avec le script précédent. Tu envoies un mail à un utilisateur du site avec le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="ton_script.php?noprod=<script>alert('Voici une attaque XSS');</script>">Visualisez votre panier</a>
    Quand le membre clique sur le lien, qui pointe bien vers ton site, un script se déclenche. Ici, c'est un simple alert(), mais on peut voler les infos des cookies, espionner la navigation... Lis le lien que j'ai donné plus haut, ou fais une recherche Google sur XSS.
    Au passage, la précaution minimale est de passer par htmlentities() le contenu de toute donnée provenant de l'utilisateur avant affichage.

  11. #11
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Merci vg33 pour ton lien. Effectivement, je controle mes valeurs au moment d'une insertion avec une DB, mais comme là il ne s'agit que d'affichage, je voyait mal où était la vulnerabilité

    Merci encore
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par zebougha
    jamais!
    Comment fait on pour ajouter les donnees a la session panier
    Fais une recherche dans le manuel sur la concaténation de tableaux.

  13. #13
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par vg33
    On change de sujet, là...
    Valider ton GET (ou ton POST...) revient à vérifier :
    1) qu'il existe
    2) qu'il ne contient que des caractètes autorisés.
    Exemple d'attaque XSS avec le script précédent. Tu envoies un mail à un utilisateur du site avec le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="ton_script.php?noprod=<script>alert('Voici une attaque XSS');</script>">Visualisez votre panier</a>
    Quand le membre clique sur le lien, qui pointe bien vers ton site, un script se déclenche. Ici, c'est un simple alert(), mais on peut voler les infos des cookies, espionner la navigation... Lis le lien que j'ai donné plus haut, ou fais une recherche Google sur XSS.
    Au passage, la précaution minimale est de passer par htmlentities() le contenu de toute donnée provenant de l'utilisateur avant affichage.
    Merci beaucoup, c'est bon à savoir !
    Dsl pour le HS du message originel

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    je ne trouve pas!!!

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Va faire un tour du côté de array_merge().
    Perso, ça m'a pris 15 secondes pour le trouver dans le manuel en tappant "array" dans la zone de recherche.

  16. #16
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    bon j'ai fait quelque modif voila ce que j'obtien:
    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
    31
    32
    33
    34
    35
    36
    <?
       				if (! isset($_SESSION['panier']) )
    				{
     				$_SESSION['panier'] = array();
    				}
    				$i=0;
     
    				$produit = $_GET['noprod'];
    				$lib = $_GET['liprod'];
    				$pu=$_GET['pu'];
    				$_SESSION['panier'][$i]['produit']=$produit;
    				$_SESSION['panier'][$i]['lib']=$lib;
    				$_SESSION['panier'][$i]['pu']=$pu;
     
    				echo "<H2>Votre panier</H2><TABLE BORDER=\"1\"><TR><TH>Produit</TH><th>Libelle</th><TH>Quantité</TH><th>Prix unitaire</th><th>Total</th></TR>";	
     
    				for ($i=0; $i<count($_SESSION['panier']); $i++)
     
    				{
     
    				?>
     				<tr>
     				<td><? echo($_SESSION['panier'][$i]['produit']); ?>
     				</td>
     				<td><? echo($_SESSION['panier'][$i]['lib']); ?>
     				</td>
     				<td><input type='integer' name='nom' size='3' value='1'>
     				</td>
     				<td><? echo($_SESSION['panier'][$i]['pu']); ?>
     				</td>
     				<td> 
     				</td>
    				 </tr>			
     
    				<?
    ..................................
    tjs le meme probleme et en plus il me marque trois erreur:
    Warning: Cannot use a scalar value as an array in c:\documents and settings\j.lemeille\mes documents\easy php\easyphp1-8\www\lemeille\index.php on line 493

    Warning: Cannot use a scalar value as an array in c:\documents and settings\j.lemeille\mes documents\easy php\easyphp1-8\www\lemeille\index.php on line 494

    Warning: Cannot use a scalar value as an array in c:\documents and settings\j.lemeille\mes documents\easy php\easyphp1-8\www\lemeille\index.php on line 495

  17. #17
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Tu peux editer ton message et mettre les balises CODE pour ton code afin qu'il soit plus lisible, merci. Tu verras qu'il y a plus de personne qui repond quand on utilise ces balises.

    De plus tu as des erreurs à la ligne 493 494 et 495, tu peux donner ces lignes.

    ++
    ShinJava

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    je ne comprend pas ce que tu veu dire par balise CODE?
    sinon les lignes ou il y a des erreurs sont :
    $_SESSION['panier'][$i]['produit']=$produit;
    $_SESSION['panier'][$i]['lib']=$lib;
    $_SESSION['panier'][$i]['pu']=$pu;

    PS: merci a tous, et desole de pas t'avoir pu repondre plus tot mais j'ete en cour.

  19. #19
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Bah apparement tu as modifier ton message donc c'est bon.
    Mais en gros les balises code permet une meilleur lisibilité de ton code.

    C'est plus facile pour nous de lire le code de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $var = 1;
    $_SESSION['Miaou'] = 1;
    ?>
    Alors que toi tu le fait de la manière suivante :
    <?php
    $var = 1;
    $_SESSION['Miaou'] = 1;
    ?>
    (c'est moins agreable à lire)

    Alors pour revenir à ton problème, les 3 lignes ont l'air bonnes sauf que pour la syntaxe j'aurais fait au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo($_SESSION['panier'][$i]['pu']);
    j'aurais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SESSION['panier'][$i]['pu'];
    Mais bon, je pense pas que le problème vienne de là.

    1/ Les 3 variables d'erreurs $_SESSION['panier'][$i] est-ce que tu les utilises autres part ? (avant ou apres, tu les met dans une BDD MySQL ?) Si oui balance les qu'on voit si c'est pas un probleme de redeclaration.

    2/ Que vaut $produit, $lib et $pu ?
    Fait un echo sur ces 3 variables voir ce que ca nous donne.

    Vala vala
    ++
    ShinJava

  20. #20
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 11
    Points
    11
    Par défaut
    ok pour les code.
    Sinon pour l'instant je ne les reutilise pas sinon ce sera pour mettre ds une base de donnees mysql.
    Le site est un site "commercial" les variable correspondent aux numero du produit ($produit) qu'on souhaite ajoute au panier, la designation ($lib)et le prix ($pu)

Discussions similaires

  1. [Sécurité] Probleme de Spam
    Par jojo15320 dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2007, 17h22
  2. [Sécurité] Probleme de sécurité
    Par autosurf-ic dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2006, 16h09
  3. [Sécurité] Probleme securite
    Par FredKéKé dans le forum Langage
    Réponses: 15
    Dernier message: 23/01/2006, 13h07
  4. [Sécurité] Probleme redirection
    Par lemagicien dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2005, 13h07
  5. Réponses: 7
    Dernier message: 18/07/2005, 13h42

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