Question

Découvrez cette page le New York Times:

  

http://homedelivery.nytimes.com/HDS/learnMorePopUp.do   ? mode = common.learnMorePopUp
   & amp; productId = NDS
   & amp; prodRate = 7.40

J'ai été surpris de constater que lorsque j'ai modifié manuellement le paramètre prodRate , la page mise à jour:

  • Le taux d'abonnement de lancement.
  • Le taux d'abonnement normal.

Essayez par vous-même! Maintenant, je n'ai pas fait beaucoup de développement web, mais je sais que cela ne devrait probablement pas arriver. Alors je me demande:

  • Quel type d'implémentation provoquerait ce comportement?
  • Comment modifieriez-vous la page pour masquer de tels paramètres sensibles à l'utilisateur final?
Était-ce utile?

La solution

Vous pourriez peut-être reformuler votre question, car les seules réponses que je peux concevoir ne sont pas très éclairantes:

Q: Quel type d'implémentation provoquerait ce comportement?
R: L'une dans laquelle l'utilisateur est autorisé à contrôler le comportement interne et approuvé. Si vous demandez "Pourquoi quelqu'un ferait-il cela", je le considère généralement comme un malentendu. En règle générale, l'auteur de code ne réalise pas que l'utilisateur peut (a) contrôler la valeur et / ou (b) même découvrir qu'elle existe. La plupart du temps, je l'ai vu implémenté sous forme de redirection: vous cliquez sur un bouton, le serveur détermine le montant, puis redirige le navigateur vers une nouvelle page qui conserve la valeur

Q: Comment modifieriez-vous la page pour masquer de tels paramètres sensibles à l'utilisateur final?
R: Ne stockez pas la valeur de manière à ce qu'elle soit modifiable par l'utilisateur final. Si vous disposez d'un espace de stockage sur le serveur (tel qu'un moteur Servlet), stockez-le dans le contexte de la session. Si vous ne disposez pas d’un bon mécanisme de session, vous pouvez l’enregistrer dans un cookie signé ou HMAC.

Autres conseils

Ils ne font probablement que lire la valeur de la chaîne de requête à des fins d'affichage. Je doute fortement (ou plutôt espère vraiment) que le traitement d’une commande n’est pas basé sur cette valeur, mais plutôt sur une recherche utilisant l’ID du produit.

Eh bien, avez-vous déjà essayé de le commander? Cela pourrait valider l'entrée sur le back-end.

En ce qui concerne les autres options, ils auraient pu envisager de publier les informations ou de les placer dans un cookie. Ni l'un ni l'autre ne sont exactement insensés. Vous ne pouvez pas obtenir une nouvelle fenêtre avec une publication et un utilisateur peut désactiver les cookies.

Vous ne pouvez pas commander à partir de cette page, je ne vois donc pas de faille de sécurité ici. Oui, c'est ringard, mais je serais bien plus inquiet si le flux des commandes était si mal construit. Il est facile de mettre à jour le taux à un endroit et de simplement transmettre la valeur afin que je puisse voir comment cela s'est passé.

Nous avons des pages d’évaluation qui font à peu près la même chose. Ils ne sont pas connectés au flux d'achat réel, les paramètres sont donc corrects. Si le client veut se confondre en modifiant une URL, qu’il en soit ainsi ... le flux des commandes est entièrement lié à la base de données et les modifications apportées par les utilisateurs ne sont jamais approuvées.

J'ai trouvé toutes sortes de mauvaises pratiques comme celle-ci. J'ai vu des sites Web transmettre des requêtes SQL entières dans la chaîne de chaînes de caractères, qui sont ensuite exécutées . Je me souviens également d'avoir trouvé une boutique en ligne dont les prix avaient été dépassés. J'ai changé l'un pour une valeur négative et, bien sûr, à la caisse le prix était moins! Je ne suis toutefois pas allé plus loin: techniquement, il s'agit d'une fraude qui ne vaut pas la peine d'être risquée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top