在Redis上安全地存储PHP会话的身份验证密钥

在Redis上安全地存储PHP会话的身份验证密钥,php,security,redis,phpredis,Php,Security,Redis,Phpredis,假设一个站点正在使用redis(远程)存储会话数据,并且该redis存储受身份验证密钥保护 因此,在php.ini中,使用phpredis将其设置为: session.save_handler = redis session.save_path = "tcp://redis.example.com:6379?auth=[AUTH_STRING_HERE]" 有没有办法让这更安全一点?服务器上运行phpinfo()的任何人;可以看到auth字符串…您可以使用ini\u set方法通过php代码设

假设一个站点正在使用redis(远程)存储会话数据,并且该redis存储受身份验证密钥保护

因此,在php.ini中,使用phpredis将其设置为:

session.save_handler = redis
session.save_path = "tcp://redis.example.com:6379?auth=[AUTH_STRING_HERE]"

有没有办法让这更安全一点?服务器上运行phpinfo()的任何人;可以看到auth字符串…

您可以使用ini\u set方法通过php代码设置此路径。在代码中,从可以存储为加密字符串的文件/字符串中选择值。

禁用phpinfo,还可以尝试设置一个外部脚本或文件命令来发送auth字符串(它的安全性更低,更容易混淆,但会将问题进一步向下移动)

从PHP7开始,您可以将一组选项传递给session_start()命令,例如

session_start([
    'save_handler' => 'redis', 
    'save_path' => 'tcp://redis.example.com:6379?auth='. $your_auth
]);
这样,您就可以使用标准的12因素应用程序最佳实践,将敏感数据存储在.env文件中


对于7之前的php版本,您应该能够使用覆盖存储在php.ini文件中的值。

请注意,尽管在启动会话时设置了
save\u path
,保存路径(和
auth
密码)仍然可以通过
phpinfo()
session\u save\u path()
ini\u get()访问
启动会话后。但是,您可以在启动会话后将保存路径更改为空字符串,以使其不再可见。