我有一个交互式html5应用程序,让人们可以在客户端自定义产品。当用户定制时,价格会根据单个组件价格进行更新。
完成此操作后,此人将结帐,我将自定义发送到服务器,服务器将接管结帐流程。
显然,向服务器发送价格数据毫无意义,因为任何人都可以欺骗POST数据。因此,我尝试编写服务器端脚本,根据所选组件(使用自定义数据发送到服务器)重新生成价格,并在结帐时显示。但是,由于提供的复杂定制,服务器端计算非常困难;似乎我必须在服务器端重写整个客户端自定义逻辑(这是很多工作)。
在我继续编写服务器端脚本之前,我想知道是否可以以某种方式将价格数据发送到服务器(也许是非对称密钥auth),这是不可欺骗的?
答案 0 :(得分:2)
永远不要永远不要相信客户端代码。如果你想省去重写客户端代码的麻烦,你可以将相关的JavaScript放在服务器上并从服务器代码中调用它(不是我建议你应该做的)那)。我建议做的另一件事是在用户完成自定义后,根据完整回发的内容重新计算价格,然后向用户显示重新计算的价格,以便他们确认。这样,如果发生任何客户端恶作剧,用户无论如何都会得到真正的价格,而且我确信如果它与之前的价格略有不同,那么你的支持人员会听到所有相关信息。
答案 1 :(得分:2)
要回答您的问题,可以使用加密将数据从客户端发送到服务器。但是,这里的问题是即使在加密之前也可以修改加密的数据。因此,加密并不是真正的解决方案。客户端可能在加密之前修改数据,如果没有服务器端检查,服务器将不知道这一点。
即使使用公钥 - 私钥加密,这仍然是不安全的。只能保证您的数据不会从用户篡改到服务器。它不能被第三方欺骗,但您的用户可以欺骗它,从而使加密变得毫无意义。因此,不信任用户向您发送有效的合法信息。
你应该仔细检查服务器中的所有内容。除非隐私是一个问题(可能基于您的描述),否则您不需要加密。这可以通过使用https轻松解决。
您创建的客户端JavaScript可以作为对用户的即时反馈,他们会在对表单进行更改时看到价格。这是好因为他们不需要等待服务器处理信息,服务器在提交表单时应该这样做。