我可以在$ _SESSION变量中保存多少级别的机密信息?

时间:2011-06-25 11:25:13

标签: php session security session-variables

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

请在下列时间说明:
a)连接不安全
b)在SSL安全性下建立连接

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

2 个答案:

答案 0 :(得分:4)

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

session-cookie只是一个由PHP生成的随机字符串,可以通过纯文本(除非你使用SSL)查看任何“中间人”,从而可以劫持另一个人会话。

存储任何类型的敏感数据在各方面都是一个潜在的安全问题,这就是为什么您今天需要PCI-DSS认证的托管和环境才能处理信用卡信息的原因。即使您从未将“存储”在服务器上,这也适用,只要信息流经您的设备,您就需要符合PCI-DSS规定。

这样做的原因是它在计算机内存上总会有一段时间可用,而受感染的计算机可能会有恶意软件可以识别该数据并将其传播给恶意者。

答案 1 :(得分:2)

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

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

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