我需要在会话中经常使用密码。我用密码加密我的用户数据,然后用一个被密码加密的密钥来加密它。所以我的问题是,将明文密码存储在php会话中(非客户端的cookie)是否安全?有没有更好的方式?或者我应该每次都要求用户输入密码?
我用phpseclib使用用户密码加密rsa的私钥。每次我想访问该密钥时,我都需要密码。我有两个选择:要么存储密码,要么存储密钥,但我认为两者都不是很好的选择。我不能使用密码哈希进行加密,因为哈希在数据库中以“明文”形式存储...
我需要在会话中经常使用密码。我用密码加密我的用户数据,然后用一个被密码加密的密钥来加密它。所以我的问题是,将明文密码存储在php会话中(非客户端的cookie)是否安全?有没有更好的方式?或者我应该每次都要求用户输入密码?
我用phpseclib使用用户密码加密rsa的私钥。每次我想访问该密钥时,我都需要密码。我有两个选择:要么存储密码,要么存储密钥,但我认为两者都不是很好的选择。我不能使用密码哈希进行加密,因为哈希在数据库中以“明文”形式存储...
在任何情况下保留明文密码通常都是一个不好的主意。会话本身是安全的,但只有在服务器环境足够安全的情况下才能如此。管理员或其他用户无论是合法的还是恶意的,都可能访问存储在其中的数据。如果可以避免,您永远不希望处理客户的密码;这也意味着您想要避免在任何情况下查看用户的密码,并且应该以技术上尽可能短暂的方式构建代码,使明文密码的存储时间最短。
如果需要在会话期间使用密码,则应设计您的应用程序,使其从不使用明文密码,而是使用密钥派生函数从密码中导出一个密钥,然后将其用于敏感任务。这样一来,曝露用户密码的机会就会大大减少。请记住,用户唯一拥有的安全性就是他所知道的密码的保密性。
如果这样做,黑客获取您的服务器访问权限后,将会看到明文密码。不要存储明文密码(无论何时)
关于这个普遍问题。您只需一次询问用户密码,然后将加密后的密码与存储在数据库中的加密密码进行验证。如果它们相同,则启动一个新的会话。当用户下次尝试访问您的网站时,您将检查是否存在该用户的会话。因此,不需要在会话中存储密码。
除了数据库,不要在任何地方存储任何类型的敏感数据。通常应避免直接使用MD5
和SHA
系列。
如果您正在实现身份验证系统,请比较客户端信息(通常是用户名和密码),然后创建一个特殊的令牌,然后将其保存到会话或Cookie中。
if ($username == 'someuser' AND $password == 'somepassword_hash'){
$token = md5(uniqid());
// database query with along with user_id and token
$_SESSION['_token'] = $token;
}
functon varifyToken($token){
// database query here
// SELECT user_id FROM sessions WHERE token = 'token_here'
}
永远不要以明文形式存储密码。除此之外:是的,会话是安全的。会话存储在服务器上。会话数据本身永远不会发送到浏览器。
是否明智甚至需要将密码存储在会话中,可能不是必须的。也许出于缓存原因,但即使如此,也不可靠。