让我们假设您有一个具备信用卡支付功能的购物应用程序。用户登录并开始购物。当用户登录时,从数据库中获取他的信用卡号和密码并将它们保存到会话变量中,以消除下一步骤中对SQL查询的需求,这样做可以吗?请描述以下情况: a) 连接不安全 b) 连接建立在SSL安全之下上述信用卡应用程序是一个例子。我想了解会话变量的安全性。
尽管会话变量存储在服务器端,但唯一真正的安全性在于会话cookie。如果会话cookie被攻击者获取,任何其他访问者都可以启动同一会话,从而能够以与原始访问者相同的方式查看页面。会话cookie只是PHP生成的随机字符串,除非使用SSL,否则可在明文中查看,因此可能会劫持另一个人的会话。存储任何类型的敏感数据都可能存在潜在的安全问题,这就是为什么今天您需要PCI-DSS认证的托管和环境才能处理信用卡信息。即使您从未在服务器上“存储”它,只要信息流通过您的设备,您就需要符合PCI-DSS法规。原因是它始终会在计算机内存中某个时间点上可用,并且已经被篡改的计算机可能携带恶意软件,该软件可以识别该数据并将其传播进行恶意行为。
正如Dagon所说,所有的会话数据通常存储在服务器上。然而,仍然存在一些陷阱。首先,在许多配置中,会话变量存储在/tmp/目录下,并由Web服务器进程的所有者拥有。在共享主机的情况下,其他用户可以访问会话数据。其次,您可以配置自己的会话处理程序,例如将会话数据存储在数据库中。在这种情况下,还必须考虑该实现的所有安全问题。最好不要将信用卡数据存储在会话数据中;只需将其写入安全位置,并通过某些合理的机制(例如数据库查找)在实际需要时检索它。