我正在训练以确保登录过程的安全。
我在sign_up.php中使用过sha 256:
$username= check_input($_POST['username']);
$password= check_input($_POST['password']);
//the password is encrypted in sha256
$secure_sign_up_password = hash('sha256', $password);当然,在SQL数据库中的users表中,我可以读到:
我的问题很简单,但可能有点天真(我是个新手):我认为我仍然能够在我的数据库中的某个地方读取实际的密码,而哈希只是为了保护密码在发送时不会被截获和读取。我不知道,可能有人会让我把他的真实密码给他。但我唯一能看到的是密码列中的“散列”。
发布于 2012-07-16 20:39:35
如果你能够“解码”这些密码,那就不是一个非常安全的系统了。一旦有人访问了你的数据库,他们就可以在不知情的情况下访问每个人的密码.
如果你忘记了一个网站的密码(我们都忘记了--不要否认!),你会记得他们通常*不只是给你发密码(以纯文本形式)来提醒你的电子邮件--他们会给你机会重新设置密码()。这样(通常通过你的电子邮件/电话号码核实),他们就会知道你确实是开户的人。
*如果他们将你的密码以纯文本形式发送给你,这可能意味着他们这样存储密码,或者以其他容易解密的形式存储密码。这个网站很可能不像他们想的那样安全.
如果您有兴趣为自己留下一个“后门”来访问您的任何用户帐户,您可能会考虑从您的管理员帐户中设置一个特殊的登录表单,允许您使用编码密码登录。这意味着您只需省略hash('sha256', $password)并传递已经编码的$password (从数据库中提取)。这有点麻烦,如果您已经有了一个管理员帐户,那么作为一个不同的用户登录就没有多大用处了,因为您已经是都强大了!!
发布于 2012-07-16 20:38:28
这是故意的。没有人应该知道我的密码是什么,除了我。即使你(在这里插入花哨的标题)也不应该知道我的密码。如果我忘了,那是我的问题,但你的网站应该提供给我一个方法来重置它。然后,当我重置时,您的站点应该再次存储哈希。纯文本密码不应存储在任何地方。
发布于 2012-07-16 22:40:45
sha256散列和其他散列是一种方式。见function。如果希望能够解密数据库中密码字段中写入的内容,则可能需要使用另一种方法。
您可以使用不与用户共享的密钥进行加密,而不是创建哈希。看看http://www.php.net/manual/en/book.mcrypt.php。但是,密钥将是代码的一部分,因为它是对称加密。
要做到真正的安全,请尝试真正的PKI加密(用公钥加密,用私有密钥解密)。请查看php.net/手动/en/function.gnupg.manual crypt.php或php.net/手册/en/book.openssl.php。
但正如这里的其他人所说,这些事情是合理地不做的;)
https://stackoverflow.com/questions/11512114
复制相似问题