【问题标题】:Are PHP Sessions not to be trusted? [closed]PHP 会话不可信吗? [关闭]
【发布时间】:2023-04-01 05:12:01
【问题描述】:

在 PHP 中在页面之间存储数据的最佳方式是什么?我会认为会话工作得很好,甚至对象会话 (https://stackoverflow.com/a/5515341/1445985) 但是假设我正在构建一个购物车,PHP 会话真的那么容易被破解,以至于不建议在其中存储购物车/购物篮数据吗?无论如何,谁在乎是否有人确实设法获得了其他人的篮子数据,这肯定不会造成任何伤害?显然信用卡数据等是有害的,但订单中的不同产品列表根本不用担心。

我看到我目前使用的购物车(我没有做到)将每个订单存储到数据库中的表中,然后只需通过订单 ID 查询表以检索所有订单信息。这是可取的吗?

我一直在努力寻找用 PHP 做事的最佳方法,但问题是似乎从来没有一种值得信赖的方法来做任何事情。总有人说这是个坏主意。

【问题讨论】:

  • “PHP 会话真的那么容易被破解吗”——是什么让你认为它们是这样的?
  • @Quentin 有人在我刚刚阅读但现在找不到的另一个 stackoverflow 问题中提到了它:S
  • 会话不会在当前浏览器会话之后持续存在,如果您希望购物车在两次访问之间持续存在,您需要使用数据库。
  • @datasage 停止传播该 FUD。如果您以这种方式进行设置,会话可以永远持续下去。这并不是说这是一个好主意,只是会话必须在“当前浏览器会话”之后过期。
  • 我用户的经验法则是,我从不在会话中存储安全数据,因为就像您说的那样,它们可能会被黑客入侵或被盗。因此,如果您只是使用它们来存储用户单击的项目,我真的看不出有任何损害。比查询数据库要快。

标签: php sql session


【解决方案1】:

虽然 PHP 会话可以在某些情况下被劫持,但它们通常被认为是安全的,并且对于您所描述的情况应该绰绰有余。强烈建议对整个会话使用 SSL (HTTPS)。

此外,如果可能,请不要在您的应用程序中保留 CC 数据。

【讨论】:

    【解决方案2】:

    以下是有关确保 PHP 会话安全的一些一般信息:

    PHP Session Security

    就是这么说的。我已经使用与您描述的类似的方法构建了一些自定义推车。我将数据库中的订单 ID 存储在 cookie 中。随着用户在结账过程中前进,购物车页面是使用存储在不同数据库表中的订单信息构建的。

    不过,我不一定会为了安全而这样做。将订单存储在数据库中意味着我不必担心用户的会话过期并且他们会丢失购物车中的所有内容。如果他们关闭浏览器并在第二天回来,他们仍然可以在之前的位置继续购物。将他们的订单存储在数据库中还可以将他们的购物车与用户 ID 关联起来,这样他们就可以从不同的机器登录并仍然保留他们的购物车信息。

    【讨论】:

      【解决方案3】:

      问题不在于 PHP 的会话(除非您的服务器被黑客入侵,在这种情况下,攻击者可以直接访问所有会话数据和其他内容),而是您如何将会话数据与特定用户相关联。您有一个必须发送给客户端的会话 ID。在 cookie 中或作为所有入站链接的 GET 参数。

      这意味着有人可以拦截(中间人攻击)该会话 ID,然后自己使用它(从而充当受害者)。或者他可以以某种方式猜测会话 ID(这不太可能)。

      因此,防止这种情况的唯一方法是使用https,它将加密服务器和客户端之间的所有请求,并防止任何人获取该信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        相关资源
        最近更新 更多