将密码和其他敏感信息存储在缓存文件中是否安全?

0 php security caching

我有一个缓存库,用于将缓存数据存储在普通的php文件中,数据存储在数组中.

缓存文件的示例:

cache_userID.php:

$userCache['userID']=2354654654;
$userCache['userName']=foo;
$userCache['userPass']=salted-and-hashed-pass;
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力.所以我正在考虑使用它来存储用户数据(如上例所示)来保存数据库查询.我已经测试了它,它确实导致页面加载时间明显加快,然后从DB中获取(这就是为什么我要这样做).

我不确定这是否真的安全.密码和其他敏感信息被加盐和散列.是否有人能够窃取这些数据?除了他们有FTP详细信息访问源代码(不会是这种情况).

Lad*_*ada 7

没有!

存储密码的每个额外位置(或仍然敏感的密码哈希)是他们可以泄漏的另一个地方.这是SSL页面未缓存的原因之一:因为不应缓存敏感信息.

良好的身份验证代码(就像您在SSH中找到的那种)甚至可以将密码存储的内存区域标记为不可撤销,因此操作系统无法将其写入磁盘.

从此缓存中泄漏敏感数据的风险可能很低,但这样做会增加风险.通过将此数据放在本地PHP文件中,现在可以通过任何本地文件包含漏洞访问它.实际上将密码回显到屏幕可能需要的不仅仅是本地文件包含.在此缓存存在之前,甚至可能需要SQL注入漏洞或完整的服务器泄露来访问密码哈希,现在这些本地文件包含可以访问哈希.

可以在多个位置存储其他不太敏感的数据以提高页面加载速度,但密码和密码哈希应该是不受限制的.

通过存储身份验证令牌,您可以避免在经过身份验证的用户的每次页面加载时计算和查找密码哈希.这应该是在登录时随机生成的(因此很难预测)并且应该是短暂的.这正是PHP会话ID所在,并且在第一次检查比较密码之后,验证用户是否经过了正确的身份验证是完全足够的.


我突然意识到,如果您要查询数据库并在每次加载页面时计算密码哈希值,您必须将密码(或可能是密码哈希)与客户端存储在某处,可能在cookie中,并且此敏感数据正在发送通过互联网为每个页面请求.这通常是不好的做法,并且会导致密码(或密码哈希)保存在用户的硬盘驱动器和潜在的中间代理上,除非您为每个页面使用SSL.


PS

我很好奇,为什么包括本地文件是明显快于什么应该是从你的数据库的简单键值查找.我的猜测是你的网络上有可怕的延迟或用户桌上的争用.要么真的需要修复.