【问题标题】:How to validate a request body with price如何使用价格验证请求正文
【发布时间】:2019-10-30 06:29:18
【问题描述】:
根据
Calculate price on frontend insecure?
应始终在后端验证价格,因为可以修改 http 请求。基本上,在我的市场中,用户可以购买一些东西,并且在该请求正文中,它包含他购买的内容、价格、小计以及该项目的相应目录 ID。然而,似乎一切都可以被操纵。如果我通过遍历他订单中的所有项目来验证小计,它们可能已被修改,因此这是不准确的。如果我要根据 id 在目录中查找实际价格,请求正文中的这些目录 id 也可能已被修改,指向错误的目录项。因此,我如何根据包含项目及其价格、小计和每个项目的目录(数据库)ID 的用户请求正文来验证价格?
另外,如果我使用 SSL,我不能在前端计算价格吗?
【问题讨论】:
标签:
server-side
client-side
【解决方案1】:
整个购物车应该留在服务器上,客户端显示购物车并要求确认。价格也可以在客户端计算,但以后必须在服务器上重新计算。
您不应丢失购物车数据的踪迹(即将其发送给用户并等待其返回),因为之后您将无法再信任它。您必须在服务器上保存购物车/订单数据,并向客户端发送已保存购物车数据的 id 以及要显示的数据本身(价格等)。然后用户发回确认和 id,而不是整个数据。使用 id 您可以在服务器上恢复购物车/订单信息、价格和所有信息,因此价格永远不会来自用户。
如果他的技术足够好,用户发送给您的任何内容都可以由他更改。
使用加密没有帮助,加密避免了在源(客户端)和目标(服务器)之间的传输过程中发生的数据更改。它不保证客户端本身是可信赖的或数据是正确的。
伪造发生在客户端,在加密发生之前(用户可以根据自己的意愿操纵 url 数据或 POST 数据,在加密之前更改价格)。
此外,加密通常保证服务器所有者是客户端的正确所有者(服务器有证书),它不保证用户或客户端软件是可信赖的,因此使用修改过的浏览器的用户是完全合法的,不能在任何方式都可以区分。