我可以为您翻译:在$_SESSION变量中,可以保存哪些级别的机密信息?

5
让我们假设您有一个具备信用卡支付功能的购物应用程序。用户登录并开始购物。当用户登录时,从数据库中获取他的信用卡号和密码并将它们保存到会话变量中,以消除下一步骤中对SQL查询的需求,这样做可以吗?
请描述以下情况: a) 连接不安全 b) 连接建立在SSL安全之下
上述信用卡应用程序是一个例子。我想了解会话变量的安全性。

6
会话存储在您的主机上。这听起来像是一份学校项目。 - user557846
我知道这个,那连接、cookies等呢?这不是一个学校项目,我正在尝试了解会话变量的安全级别。 - Hossein
Cookies不是会话。 - user557846
2
将信用卡信息存储在您的数据库中本身就是一个很大的安全问题。 - Mat
1
你为什么要将密码存储在会话中呢?而且为什么你需要存储密码呢?你只需要存储其哈希值以进行验证即可。 - Gumbo
显示剩余5条评论
2个回答

4
尽管会话变量存储在服务器端,但唯一真正的安全性在于会话cookie。如果会话cookie被攻击者获取,任何其他访问者都可以启动同一会话,从而能够以与原始访问者相同的方式查看页面。
会话cookie只是PHP生成的随机字符串,除非使用SSL,否则可在明文中查看,因此可能会劫持另一个人的会话。
存储任何类型的敏感数据都可能存在潜在的安全问题,这就是为什么今天您需要PCI-DSS认证的托管和环境才能处理信用卡信息。即使您从未在服务器上“存储”它,只要信息流通过您的设备,您就需要符合PCI-DSS法规。
原因是它始终会在计算机内存中某个时间点上可用,并且已经被篡改的计算机可能携带恶意软件,该软件可以识别该数据并将其传播进行恶意行为。

1
除非您使用SSL,否则使用安全标志来设置您的Cookie。如果您不使用SSL并接受端口80的连接,这也是一种不好的做法(如果您真的想避免中间人攻击)。 - Pedro Laguna
是的,任何非 SSL 连接到同一站点/域将收到相同的会话 cookie。感谢您指出这一点。 - jishi

3
正如Dagon所说,所有的会话数据通常存储在服务器上。
然而,仍然存在一些陷阱。首先,在许多配置中,会话变量存储在/tmp/目录下,并由Web服务器进程的所有者拥有。在共享主机的情况下,其他用户可以访问会话数据。其次,您可以配置自己的会话处理程序,例如将会话数据存储在数据库中。在这种情况下,还必须考虑该实现的所有安全问题。
最好不要将信用卡数据存储在会话数据中;只需将其写入安全位置,并通过某些合理的机制(例如数据库查找)在实际需要时检索它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接