【问题标题】:What level of confidential information can I save in a $_SESSION variable?我可以在 $_SESSION 变量中保存什么级别的机密信息?
【发布时间】:2011-09-22 13:47:55
【问题描述】:

假设您有一个具有信用卡支付功能的购物应用程序。用户登录并开始购物。是否可以在用户登录后立即从数据库中获取他的信用卡号和密码并将它们保存到会话变量中,以消除在用户完成付款的后续步骤中对未来 SQL 查询的需要?

请在以下情况下描述:
a) 连接不安全
b) 连接是在 SSL 安全下建立的

上面的信用卡申请就是一个例子。我想深入了解会话变量的安全性。

【问题讨论】:

  • 会话存储在您的主机上。这确实像一个学校项目。
  • 我知道,连接、cookie 等呢?这不是学校项目,我正在尝试了解会话变量的安全级别。
  • cookies 不是会话
  • 将抄送信息存储在数据库中本身就是一个很大的安全问题。
  • 为什么还要在会话中存储密码?为什么你还要存储密码?你只需要存储它的哈希值来验证它。

标签: php session security session-variables


【解决方案1】:

即使会话变量存储在服务器上,唯一真正的安全性是会话cookie,如果它被泄露,将允许任何其他访问者启动相同的会话,因此能够以相同的方式查看页面原来的访客。

session-cookie 只是 PHP 生成的一个随机字符串,对于任何“中间人”都可以以纯文本形式查看(除非您使用 SSL),因此可以劫持其他人的会话。

存储任何类型的敏感数据在各个方面都是一个潜在的安全问题,这就是为什么您现在需要 PCI-DSS 认证的主机和环境来处理信用卡信息。即使您从未将其“存储”在您的服务器上,这也适用,只要信息流经您的设备,您就需要遵守 PCI-DSS 法规。

这样做的原因是它在计算机内存中的某个时间始终可用,并且受感染的计算机可能具有恶意软件,可以识别该数据并出于恶意而传播它。

【讨论】:

  • 除非您使用 SSL”并且您对 cookie 使用安全标志。不使用 SSL 并接受到端口 80 的连接,这也是一种不好的做法(如果你真的想避免中间人攻击)
  • 是的,对同一站点/域进行的任何非 SSL 连接都将收到相同的会话 cookie。感谢您指出这一点。
【解决方案2】:

正如 Dagon 所说,所有会话数据通常都驻留在服务器上

但是,仍然存在一些陷阱。首先,在许多配置中,会话变量存储在/tmp/ 中并归Web 服务器进程的所有者所有。在共享主机情况下,可以想象共享主机上的其他用户设法访问会话数据。其次,您可以配置自己的会话处理程序,例如将会话数据存储在数据库中。在这种情况下,还必须考虑该实施的所有安全问题。

最好不要在会话数据中存储信用卡数据;只需将其写入安全位置,并在实际需要时通过某种合理的机制(例如数据库查找)检索它。

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2021-03-07
    • 1970-01-01
    • 2014-11-10
    相关资源
    最近更新 更多