Is it secure to store a password in a session?
我需要经常在会话中使用密码。我正在用密码加密的密钥加密我的用户数据。所以我有个问题。在PHP会话中存储纯文本密码(不是cookie,所以不是客户端)是否安全?有更好的方法吗?或者我应该每次都问我的用户密码吗?
我使用phpseclib用用户密码加密RSA的私钥。每次我想要进入钥匙,我都需要密码。我有两个选择:要么存储密码,要么存储密钥,我认为两者都不太好。我不能使用密码哈希进行加密,因为哈希存储在数据库的"明文"中…
- 会话存储在服务器上,您只需在浏览器中获取会话ID的cookie
- 就个人而言,我不认为任何地方存储的明文密码是安全的。
- 可能是密码散列的密码?
- 您可以这样存储密码。浏览器无法访问会话!
- 存储在客户机上的唯一东西是会话密钥,它要么通过cookie传播,要么通过get参数传播。
- 考虑加密密码。
- 我将散列存储在数据库中,但我需要纯文本。那么它是安全的吗?
- php.net/manual/en/session.security.php
- 有点取决于你的会话有多安全…它能被劫持吗?根据经验,永远不要存储密码…完全停止。即使在数据库中,也不应该只需要密码的"指纹",一个咸哈希。您不应该能够检索密码。
- 如果站点上有一个用户输入字段没有得到适当的保护,那么有人可以在输入中插入javascript,将会话数据发送到其他链接somwhere。
在任何地方以任何身份保存明文密码通常是一个坏主意。会话也是安全的,但只有与服务器环境的其他部分一样安全。合法和恶意的管理员或其他用户可以访问存储在其上的数据。如果可以避免的话,你永远不想处理客户的秘密;这也意味着你在任何情况下都不想看到用户的密码,你应该以明文密码在技术上尽可能短的方式构建代码。
如果您需要在会话期间为某个内容使用密码,那么您应该设计应用程序,使其从不使用纯文本密码,而是使用密钥派生函数从密码派生密钥,然后将该密码用于敏感任务。这样暴露用户密码的机会就小得多。记住,用户拥有的唯一安全性是密码的保密性,只有他才应该知道。
- 对。您可以选择在会话中存储派生密钥,因为您知道如果服务器受到攻击,派生密钥可能会受到攻击,但至少用户的密码仍然是安全的。这样,对于在其他地方使用相同密码的用户来说,安全失败不会成为更大的问题。
如果这样做,当黑客访问您的服务器时,他们将看到纯文本的密码。从不存储纯文本密码(无论在何处)
关于一般问题。您向用户询问一次密码,并根据存储在数据库中的加密密码验证加密密码。如果它们相同,则启动新会话。当用户下次尝试访问您的网站时,您将检查此用户的会话是否存在。所以不需要在会话中存储密码。
- 当黑客访问您的服务器时,我不认为PHP会话数据是他可能首先读取的…如果他在服务器上,他可以取回很多东西!
- @乔德夫有很多事情,是的。但不是普通的用户密码
- 是的,不是直接的,但是这个密码可能存储在像mysql这样的SQL数据库中…所以他可以直接从源代码读取所有密码!(当我们有能力入侵服务器时,您可以打开MySQL…)
- 更可能的是,您会在某个地方发生SQL泄漏,这可能会泄露密码。你不太可能被根除。黑客很少真正获得访问权,阅读你不应该阅读的东西通常更常见。
- @希望黑客不查找会话数据的jodev有点幼稚:)
- 不,我刚说。从来没有!我认为他可以在数据库中检索密码…
- @Jodev不,只是他们的哈希是可见的(你明白吗?)
- 只有哈希在数据库中可见?你说的是什么?(这不是玩笑,我不太明白^)
除了数据库之外,不要在任何地方存储任何类型的敏感数据,通常应避免直接使用MD5和SHA系列。
那解决办法是什么?
如果您正在实现身份验证系统,那么比较客户端信息(通常是用户名和密码),然后创建一个特殊的令牌,然后将其保存到会话或cookie中。
例子
1 2 3 4 5
| if ($username == 'someuser' AND $password == 'somepassword_hash'){
$token = md5(uniqid());
// database query with along with user_id and token
$_SESSION['_token'] = $token;
} |
比较令牌
1 2 3 4 5
| functon varifyToken($token){
// database query here
// SELECT user_id FROM sessions WHERE token = 'token_here'
} |
号
不要以纯文本形式存储密码。除此之外:是的,会话是安全的。会话存储在服务器上。会话数据本身从不发送到浏览器。
在会话中存储密码是明智的还是必要的,可能不是。可能是因为缓存的原因,但即便如此,它仍然是片状的。
- +一个平衡点,因为没有什么可以投反对票的。
- 编辑了撤消投票的答案。:)
- MHM,起初不清楚OP是用明文存储密码的——这太荒谬了,我错过了。
- 是的,我想说的是,在答案被冻结之前