1

我有一个交互式 html5 应用程序,可以让人们在客户端自定义产品。当用户进行定制时,价格会根据单个组件的价格进行更新。

完成此操作后,该人点击结帐,我将定制发送到服务器,然后服务器接管结帐过程。

显然向服务器发送价格数据是没有意义的,因为任何人都可以欺骗 POST 数据。因此,我尝试编写一个服务器端脚本,该脚本将根据所选组件重新生成价格(与自定义数据一起发送到服务器),并在结帐时显示。然而,由于提供了复杂的定制,服务器端的计算被证明是非常困难的;而且似乎我必须在服务器端重写整个客户端自定义逻辑(这是很多工作)。

在我继续编写服务器端脚本之前,我想知道是否有可能以一种无法欺骗的方式(也许是非对称密钥身份验证)将价格数据发送到服务器?

4

2 回答 2

2

你永远不应该永远相信客户端代码。如果您不想为重写客户端代码而头疼,您可以将相关的 JavaScript 放在服务器上并从您的服务器代码中调用它(并不是我建议您应该这样做)。我建议做的另一件事是在用户完成自定义后根据完整回发的内容重新计算价格,然后向用户显示重新计算的价格,以便他们确认。这样,如果发生任何客户端恶作剧,无论如何用户都会得到真实价格,而且我敢肯定,即使它与之前的价格略有不同,您的支持人员也会听到所有有关它的信息。

于 2013-03-11T17:09:05.680 回答
2

永远不要相信客户发给你的信息。

要回答您的问题,可以使用加密将数据从客户端发送到服务器。然而,这里的问题是被加密的数据甚至可以在加密之前被修改。因此,加密并不是真正的解决方案。客户端可能会在加密之前修改数据,如果没有服务器端检查,服务器将不知道这一点。

即使使用公私钥加密,这仍然是不安全的。只能保证您的数据不会被从用户篡改到服务器。它不能被第三方欺骗,但您的用户可以欺骗它,从而使加密毫无意义。因此,不要相信用户会向您发送有效的合法信息。

您真的应该仔细检查服务器中的所有内容。除非隐私是一个问题(这可能基于您的描述),否则您不需要加密。这可以通过使用 https 轻松解决。

您创建的客户端 javascript 可以作为对用户的即时反馈,他们在更改表单时会看到价格。这很好,因为他们不需要等待服务器处理信息,服务器应该在提交表单时处理这些信息。

于 2013-03-11T17:09:43.817 回答