代码之家  ›  专栏  ›  技术社区  ›  roflwaffle

如何确保数据库中的产品ID不被篡改

  •  1
  • roflwaffle  · 技术社区  · 14 年前

    我有一个小的php/mysql购物车系统,用户可以向其中添加产品、结帐和付款。
    这些产品上都有ID,因此当用户签出时,
    我可以获得该产品的属性(价格、重量、供应商的帐户ID等)。

    现在有人很容易打开Firebug,
    猜猜另一个产品ID,更改它,然后结账。

    最好的预防方法是什么?
    商店和结账系统位于两个不同的域上,如果这很重要的话。
    我可以用一些独特的纪念品
    但是,如果多个客户同时使用购物车,这将如何工作?

    编辑 :哇,打得太快了,遗漏了一些重要的细节。购物车当前表示为存储在PHP会话中的JSON。所有产品都有一个与供应商帐户关联的帐户ID。

    如果用户更改了产品ID,并且碰巧从另一个供应商的帐户(基本上是从另一个公司的商店购买另一个公司的产品)下获得了一个不受欢迎的产品,那么问题就会出现。谢谢你的回答。

    5 回复  |  直到 14 年前
        1
  •  3
  •   Jacco    14 年前

    使用服务器端会话存储购物车详细信息。

    每个会话都会得到一个唯一的ID,存储在cookie中。所有详细信息(所选项目、金额等)都与此sessionid关联。

    根据定义,您不希望不同的客户使用相同的购物车。相反,每个客户都使用自己的购物车副本。

    如果您需要与某个外部服务“共享”sessionid,请计算一个单独的唯一密钥,并将该密钥与第三方服务(在您的情况下为checkout service)共享。
    这样可以确保在与第三方通信时,您可以唯一地识别客户,而第三方不知道您如何识别客户或如何与您的客户进行通信。(要记住的重要一点是,sessionid是一个共享的秘密,没有人应该知道它)。

        2
  •  1
  •   DampeS8N    14 年前

    如果您有权访问购物车系统,正确的方法是让它在运行付款之前复制ID查找和成本计算。这样,如果有人真的从一盒1.99美元的糖果换成了一台1999.99美元的高清电视,他们就要为这台电视付费。

    如果你没有进入你的购物车系统,或者你不能告诉它什么是产品和他们的成本。获取新的购物车系统。

    附带说明:您不应该信任来自用户的数据。不需要建立信任用户的基础。只需接受ID并运行服务器上的所有数字。

        3
  •  0
  •   Lee D    14 年前

    一种方法是使用哈希。当他们选择产品并呈现表单时,获取产品ID的哈希并将其存储在产品ID旁边的隐藏字段中。当“签出”发布时,获取发布的产品ID的哈希并将其与表单中发送的产品ID进行比较。如果不匹配,则产品ID已被篡改。我不熟悉PHP,所以无法提供代码示例,但我在ASP.NET中使用了这种方法,它很有魅力。

    希望这有点道理!

        4
  •  0
  •   Eugene Mayevski 'Callback    14 年前

    威胁是什么?如果客户端只有产品ID,那么如果他们更改了ID,他们将购买不同的产品,这就是全部。或者你的产品不适合所有人?如果不是,则需要使用随机ID,这样就不容易猜测到它们。

        5
  •  -1
  •   Poonam Bhatt    14 年前

    我认为你要做的是加密/解密你的产品ID并使用它。 您可以使用base64_encode()和base64_decode()。

    希望这会有帮助