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

JavaScript Discussion :

Un panier avec LocalStorage - Sécurité


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut Un panier avec LocalStorage - Sécurité
    Bonjour. Si un spécialiste JS a un avis sur la question ?

    J'ai crée un site statique pour une petite boutique, avec une page PANIER. Le panier marche avec LocalStorage et des boutons addToCart en JS.
    Un bouton SDK Paypal permet de finaliser le paiement. Je récupère le total via JS et je l’intègre dans le script PayPal.
    La seule indication publique est l'ID client dans le chemin du script.

    Selon vous, cela pose il un problème de sécurité ? Je sais bien qu'il est possible de changer le prix du total via la console, mais je ne vois pas l'intérêt de la manœuvre
    car au final le total payé via Paypal ne correspondra pas au produit et le vendeur le verras bien.

    Pour l'instant, je suis assez serein sur la procédure car je ne transmet aucun code, token confidentiel mais peut-être que je suis dans le faux.
    J'ai une certaine maitrise de JS mais je ne suis pas non plus un expert.

    Si certain-e parmi ont des connaissances poussées en JS et peuvent confirmer ou infirmer ? Merci.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 563
    Par défaut
    Bonsoir,

    Pour répondre directement, votre intuition technique est correcte sur le fonctionnement, mais elle présente un risque de sécurité métier important.


    En déléguant le calcul du total exclusivement au JavaScript (côté client), vous reposez sur ce qu'on appelle la confiance aveugle envers le client.

    Un utilisateur malveillant peut ouvrir la console, modifier la variable total de votre script ou altérer le contenu du localStorage avant de cliquer sur le bouton. Il peut ainsi transformer un panier de 500 € en une transaction de 1 €.

    Vous avez raison sur un point, quand vous ne transmettez aucun token confidentiel (Secret Key).
    C'est le bon réflexe, mais la sécurité ne concerne pas seulement la confidentialité des clés, elle concerne aussi l'intégrité des données (s'assurer que le prix n'a pas été modifié en chemin).

    Si vous restez sur votre solution actuelle, assurez-vous que le mail de confirmation de commande envoyé au vendeur affiche très clairement le message : ATTENTION, Vérifiez que le montant payé correspond bien au prix catalogue avant expédition.

    Sinon, vous pouvez passer par les PayPal Server-Side SDKs, au lieu de passer le montant directement dans le bouton, vous utilisez l'option createOrder pour appeler un script (en PHP par exemple, puisque c'est très léger à déployer) qui fera l'appel API v2/checkout/orders de manière sécurisée.

  3. #3
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut
    Désolé d'insister mais en quoi le fait de pouvoir changer via le LocalStorage le prix du panier est un soucis ?

    Si le prix est changé, 1€ au lieu de 500€, la somme reçu sur le compte de la boutique sera bien 1€ et ils verront bien que le prix ne correspond pas.
    Si il s'agissait d'une grande boutique, je n'aurais pas la même logique, mais là c'est artisanal. Donc, peu de vente et chaque vente est visée.

    Je ne vois pas l'intérêt d'une personne de changer le prix, car cela annulerait de fait la vente puisque le prix demandé ne serait pas bon.
    Je ne sais pas si mes explications sont bonnes ?

    PS: C'est un site statique. Donc PHP, c'est mort. C'est du JS.
    ps 2: J'utilise deja un bouton SDK paypal.
    PS 3 : Une petite api consulté en JS avec une base de donnée SQLITE serait une solution ?

  4. #4
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 509
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 509
    Par défaut
    immaginons : je fais un panier a 500e, je transforme en 1e
    je paye
    la commande est envoyee a la preparation, et le 1e est envoye a la compta

    le gars prepare la commande et l'envoi.
    le lendemain le gars de la compta : "n'envoi pas la commande !" ... trop tard

    je fais maintenant la sourde oreille, et adieu les 499e manquant

    ---

    autre scenario (qui semble etre ton cas)
    je fais un panier a 500e, je le transforme en 1e
    je paye
    le gars du magasin est le meme que celui qui prepare la commande...
    il voit 1e, et se dit qu'il y a un probleme
    il ne fait pas la commande, et maintenant doit lancer un processus de remboursement

    ---

    scenario 3
    je fais un panier a 500e, je le transforme en 250e
    je paye
    le gars du magasin ne fait pas trop attention.. voit un gros montant
    il prepare la commande, et l'envoi


    la regle absolue est qu'il ne faut jamais faire confiance a de la donnee provenant du client (ordinateur/telephone/autre), il faut toujours faire les actions sur un serveur.
    mais si tu n'as pas de back.. je ne vois pas trop de solution viable
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut
    Citation Envoyé par Doksuri Voir le message
    la régle absolue est qu'il ne faut jamais faire confiance a de la donnee provenant du client (ordinateur/telephone/autre), il faut toujours faire les actions sur un serveur.
    mais si tu n'as pas de back.. je ne vois pas trop de solution viable
    J'ai bien précisé qu'il s'agissait d'une PETITE BOUTIQUE ARTISANALE.
    Les scénarios qui tu élabores sont justes évidemment, mais dans ce cas là ils sont peu probables puisqu'il y a 1 seule et même personne qui verrait vite le soucis.

    Dans le cas numéro 2 , tu peux aussi envoyer un message. Merci de terminer votre paiement... en attente.

    Le site est statique mais envoyé sur un serveur qui propose des BDD etc...
    Si vraiment je suis obligé, je pense a (SQLITE avec une mini api en php (ou un petit framework ?)) mais j'aimerais m'éviter ce travail.

    Et je ne vois toujours pas le soucis de pouvoir changer le localStorage dans mon cas (je reprécise).

  6. #6
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut
    Au final... J'ai crée une micro-api qui calcule le total du panier en JS. C'est assez "simple".
    J'utilise une base de donnée SQLITE pour les ID produit et le prix.

    Le total panier n'est jamais calculé par la navigateur en JS mais bien sur un serveur.
    Même si une modification du total serait flagrante dans mon cas, je vais me conformer aux règles de base.

    J'ai aussi ajouter un script pour reloader la page (je connais l'ajax mais je préfére comme çà) quand le localStorage est modifié.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 475
    Par défaut
    Au final... J'ai crée une micro-api qui calcule le total du panier en JS. C'est assez "simple".
    J'utilise une base de donnée SQLITE pour les ID produit et le prix.
    Avec une auth ?
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  8. #8
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut
    Citation Envoyé par gabi7756 Voir le message
    Avec une auth ?
    Non, l'api est ouverte. Il n'y a rien de confidentiel et ça m'évite du travail en plus.
    J'ai trouvé un bon système de backend : https://pocketbase.io/
    Plutôt que de faire une api sans interface ou plutôt avec.. mais de façon détourné.

    PocketBase donne la possibilité d'ajouter des scripts JS donc, c'est parfait.
    Il possible de l'utiliser chez eux ou de l'héberger. C'est mieux que Firebase de Google.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 475
    Par défaut
    Et depuis l'API tu peux modifié le prix des articles ?
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  10. #10
    Membre confirmé Avatar de BKaernel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2023
    Messages : 31
    Par défaut
    Citation Envoyé par gabi7756 Voir le message
    Et depuis l'API tu peux modifié le prix des articles ?
    L'API est un backend ou plutôt le contraire. C'est comme si tu pouvais visualiser ta base de donnée et la construire en visuel.

    Après, c'est une base de donnée. Tu as toutes les routes que tu veux. Voir, modifier, poster, updater... Comme une BDD quoi.
    Soit tu le fait de ton site statique. Soit en direct dans l'interface PocketBase.

Discussions similaires

  1. [Oracle] Panier avec base Oracle
    Par bsidy1 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/01/2009, 10h38
  2. Panier avec session
    Par ibrahim26 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/12/2008, 18h04
  3. [PHP 4] Création panier avec le tutoriel de ce site
    Par telodo dans le forum Langage
    Réponses: 5
    Dernier message: 29/12/2008, 15h43
  4. panier avec les JSP/Servlet
    Par cool dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/06/2008, 22h39
  5. programme du type "panier" avec flash
    Par tounpat dans le forum Flash
    Réponses: 0
    Dernier message: 01/04/2008, 11h49

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