1

看看纽约时报的这个页面:

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

我惊讶地发现,当我手动修改prodRate参数时,页面更新了:

  • 介绍性订阅率。
  • 常规订阅率。

自己试试吧!现在,我还没有做太多的 Web 开发,但我知道这可能不应该发生。所以我想知道:

  • 什么样的实现会导致这种行为?
  • 您将如何修改页面以向最终用户隐藏此类敏感参数?
4

5 回答 5

3

他们可能只是出于显示目的从查询字符串中读取值。我非常怀疑(或者更确切地说,真的希望)任何实际的订单处理都不是基于该值,而是基于使用产品 ID 的查找。

于 2009-07-29T19:32:46.343 回答
1

好吧,你真的试过订购了吗?它可能会验证后端的输入。

至于其他选项,他们可以考虑发布信息或将信息放入 cookie。两者都不是万无一失的。您无法获得包含帖子的新窗口,并且用户可以关闭 cookie。

于 2009-07-29T19:33:44.687 回答
1

你不能从那个页面订购,所以我没有看到这里有安全漏洞。是的,这很俗气,但如果实际订单流程构建得如此糟糕,我会更加担心。它确实可以很容易地在一个地方更新速率并传递值,所以我可以看到它是如何发生的。

我们有一些评级页面可以做几乎相同的事情。它们没有连接到实际的购买流程,因此参数很好。如果客户想通过编辑 URL 来迷惑自己,那就这样吧……实际的订单流程都是由数据库驱动的,用户的编辑永远不会被信任。

于 2009-07-29T19:35:25.480 回答
1

我发现了各种这样的不良做法。我见过网站在 Querystring 中传递整个 SQL 查询,然后执行。我还记得在查询字符串中找到了一家通过价格传递的在线商店。我把一个改成负值,果然,结账时价格是负的!不过,我没有更进一步——从技术上讲,这是欺诈行为,不值得冒险。

于 2009-07-29T19:37:31.667 回答
1

您可能想改写您的问题,因为我能想到的唯一答案并不太有启发性:

问:什么样的实现会导致这种行为?
答:一种允许用户输入来控制内部可信行为的方法。如果你问“为什么有人会这样做”,我通常认为这是一种误解。代码作者通常没有意识到用户可以 (a) 控制值和/或 (b) 甚至发现它的存在。大多数情况下,我看到这实现为重定向 - 您单击一个按钮,服务器确定数量然后将浏览器重定向到维护该值的新页面

问:您将如何修改页面以对最终用户隐藏这些敏感参数?
答:不要以最终用户可编辑的方式存储值。如果服务器上有可用的存储空间(如 Servlet 引擎),请将其存储在会话上下文中。如果您没有良好的会话机制,则可以将其存储在签名或 HMAC 的 cookie 中。

于 2009-07-29T19:38:37.187 回答