1

在黑客挑战中,我发现了以下内容:

<input type="hidden" value="1500" name="price">

如果您足够聪明,可以更改价值(由 Web 应用程序的客户端强加)..您可以更改商品的价格。我想知道..我怎样才能使那行代码更安全?我想你应该从服务器端强加价格作为开始..任何关于如何处理此类问题的建议都非常受欢迎..非常感谢..

4

3 回答 3

0

不要在客户端包含它。为什么价格应该是客户端的,而不是首先显示给用户?(实际上,将价格提供给客户并没有什么坏处……您希望您的客户看到价格,但实际上相信价格是准确的并且没有被篡改是愚蠢的。

在处理订单中的商品时,您应该根据 ItemId 查找价格,而不是接受来自客户端的价格。任何客户端数据都被自动视为不受信任,应进行验证。在上下文中,假设这是一个项目并且您正在单击“添加到购物车”选项,那么接受隐藏字段值是正确的价格将是愚蠢的。 在这种情况下,验证它意味着不仅要确保它是十进制数字,还要确保实际价格。

相反,该项目应该有一个 ID,服务器端的调用将使用该 ID 在 Products 表中查找价格,并使用从 Products 表中检索到的经过验证的价格。

即使您要加密价格,您也必须假设它已被篡改。这是在初始设计阶段应实施安全和常识的明显案例之一。如果是这样,那么这样的事情一开始就不会成为代码。


综上所述,将其放在那里可能是合法的商业原因,而与订购过程无关。也许开发团队希望通过隐藏字段将其公开。如果他们希望价格可以通过 javascript 或其他方式读取,那么让其可用是有意义的……例如,对于在数量更改时调整价格的客户端功能来说。我不确定我会这样做,但在那种情况下,它没有害处。

于 2013-01-08T17:20:05.753 回答
0

通常,您会在网页上显示价格,以便用户知道他们支付了多少,但价格的最终确定仍来自服务器上的价格数据库。

如果您正在进行大量价格变化,您可以这样做,以便在用户查看价格和点击购买之间的价格变化时通知用户。

如果最终价格包含在网页中,它只是邀请人们设置自己的价格。如果您打算这样做,您不妨做广告并获得这样的功能所暗示的额外业务。

如果您是黑客,我建议您戴上白帽子并通过电子邮件向网站所有者发送电子邮件,让他们知道他们遇到了问题。

于 2013-01-08T17:21:54.723 回答
0

我已经看到了这个 hack 的一个版本,其中价格设置为负数;当购物车总计时,这意味着黑客可以获得免费的东西。

例如,如果页面允许您为电视设置 -5,000 英镑的价格,那么我可以将 5,001 英镑的商品添加到我的购物车中,并且只需向您的网站支付 1 英镑

它无助于解决您的问题,但正如这里的其他帖子所说,您真的不应该相信来自您网页的价格。当您计算任何价格时,您应该从产品数据库中获取值,希望那里没有价格为 - 5,000 英镑的产品......

于 2013-01-08T17:29:14.367 回答