E commerce 电子商务:可以通过查询字符串传递订单Id吗?

E commerce 电子商务:可以通过查询字符串传递订单Id吗?,e-commerce,E Commerce,我们正在开发一个专门处理在线支付的网站。我们想知道,在付款过程中通过querystring传递订单/交易Id可以吗?由于服务器开销,我们不希望将此Id存储在会话变量中,因此我们认为将其存储在querystring中是合适的 有什么想法吗?特别是从安全的角度来看 非常感谢。您应该在数据库中捕获订单。不建议在查询字符串中传递它。在查询字符串中传递敏感信息(例如订单号)通常是个坏主意,原因有很多: 1) GET url以明文形式传递,这意味着客户端和服务器之间的任何内容都可以从请求中读取和捕获订单号。

我们正在开发一个专门处理在线支付的网站。我们想知道,在付款过程中通过querystring传递订单/交易Id可以吗?由于服务器开销,我们不希望将此Id存储在会话变量中,因此我们认为将其存储在querystring中是合适的

有什么想法吗?特别是从安全的角度来看


非常感谢。

您应该在数据库中捕获订单。不建议在查询字符串中传递它。

在查询字符串中传递敏感信息(例如订单号)通常是个坏主意,原因有很多:

1) GET url以明文形式传递,这意味着客户端和服务器之间的任何内容都可以从请求中读取和捕获订单号。如果你的服务器依赖订单号来做任何重要的事情,那么它就很容易被滥用

2) 大多数代理和访问日志将记录包括GET查询在内的web地址,这意味着客户的订单号将存储在任意数量机器(包括您的服务器)的访问日志中。你很可能无法控制这种行为,这是非常糟糕的(TM)


为了确保应用程序的安全,您应该将实际订单号存储在服务器上的会话中,并将其以cookie形式传递给用户(最好是加密的)。以明文形式传递任何重要的内容都容易被滥用,不应该试图传递任何重要的内容。

尝试使您的服务无状态是一个值得追求的目标。不过,在查询字符串中使用订单ID是否“安全”取决于很多因素。您可能需要担心的主要事情是:

  • 更改订单ID的用户
  • 订单ID“泄漏”给第三方
  • 第三方预测的订单ID
我说“可能”是因为你真正需要担心的事情取决于你的系统的细节。这些事情发生的后果是什么?根据系统的具体情况,这些可能是无害的,也可能是非常严重的

最容易解决的问题是“泄漏”问题。使用HTTPS。这不仅可以防止“窃听者”,还可以防止由于代理日志和Referer头而导致的泄漏

预测问题可以通过加密(是的,除了HTTPS——我们也不希望最终用户解密)查询字符串中出现的订单ID来解决。这样一来,用户就不能仅仅通过增加/减少查询字符串来查找另一个订单ID(这也会阻止用户轻松计算出系统中的订单总数,这可能是需要的)

您可以通过记录首次分配订单ID时该订单ID属于谁,或者通过将(user,orderid)对的安全签名作为查询参数来解决用户更改其订单ID的问题。然后用户只能将他们的订单ID更改为他们已经拥有的ID,这至少可以防止他们篡改别人的订单。如果这样做,您可能不需要对订单ID进行加密,除非您想阻止用户知道存在多少订单


这些只是一些想法。其中哪些应用于您的系统取决于我前面提到的因素。< /P> < P>加密订单ID将是好的-您也可以考虑散列原始订单ID,并将其和散列令牌传递到QueIrrices字符串中。我不认为这是一个安全风险,因为我不认为订单ID作为敏感数据。你需要做的就是确保用户没有以任何方式操纵它


您可以将密钥称为orderid以外的其他名称,可能是sortOrder或cheeseQuality。黑客永远不知道去哪里找!:)