违反Web开发规则

时间:2009-07-29 19:30:37

标签: parameters url-parameters

查看纽约时报的this page

  

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

我很惊讶地看到,当我手动修改prodRate参数时,页面已更新:

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

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

  • 什么样的实施会导致这种行为?
  • 如何修改页面以隐藏最终用户的敏感参数?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

至于其他选项,他们可以考虑发布信息或将信息放入cookie中。两者都不是完全傻瓜的证据。您无法使用帖子获得新窗口,用户可以关闭Cookie。

答案 2 :(得分:1)

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

我们有一些评级页面几乎完全相同。它们与实际购买流量无关,因此参数正常。如果客户希望通过编辑URL来混淆自己,那么就是......实际的订单流是所有数据库驱动的,用户编辑永远不会被信任。

答案 3 :(得分:1)

我发现了各种各样的坏习惯。我已经看到网站在Querystring中传递了整个SQL查询,然后执行。我还记得找到一个在querystring中通过价格的在线商店。我把一个改为负值,当然,在结账时价格是负的!我没有再进一步 - 技术上它是欺诈,不值得冒险。

答案 4 :(得分:1)

您可能想要重新解释您的问题,因为我能想到的唯一答案并不太明显:

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

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