我在编码“记住me'装备登录表单的中间,到目前为止我读过的教程(部分是为了确保我这样做是正确)都说沿存储在cookie中的加密密码以用户名。 然后,每次PHP会检查当前用户没有登录,检查他们的饼干和寻找那些价值。 如果用户名相匹配的密码,你就能加入。
对我来说,这是一个巨大的安全漏洞。 如果有人破解数据库或以某种方式获得访问加密的密码,他们甚至不会需要破解它们。 只需设置自己的cookie去。 我是正确,或者只是被偏执?
我的登录系统使用会话跟踪当前的用户ID,并快速登录/ 1/0注销支票。 用户不能AFAIK编辑会话,所以这是安全的(如果不是的话,请让我知道)。 我想只是存储在cookie中的会话ID,以稍后恢复,但是这也并不安全。
我很在意我的用户的安全,我如何能够正确地保护自己的信息,同时仍保持正常运转的网站?
通常,当被请求的服务器记住用户 ,它会发出正常的会话cookie旁边有一个额外的cookie,而这个新的字符串中包含的用户名和随机字符,这使得它难以猜测的合理费用。 这显然是保存在数据库中(出于安全考虑,您可能希望把它像一个密码,因此盐和哈希的话),并且用户使用相同的浏览器下一次连接时(假设旧的会话过期)的应用程序接收随机字符串,检查数据库,如果有一个匹配的用户进行身份验证。
一个替代方案是提前一定量的移动会话到期时间。
什么是这里的安全漏洞? 只要你使用一个很好的随机生成,可能发生的唯一的事情是,用户从访问一个共享的浏览器应用程序并没有手动注销何时结束。
正常的规则总是适用,因为你是在一个不安全的通道:使用HTTPS,否则谁您的计算机和服务器之间坐落在可以窃取cookie(或会话一个或记得,我的一个),并充当如果它是你的。
奖金,这个由杰夫·阿特伍德必读
从未以任何方式(可用于登录加密的密码仍然是一个密码)上的客户端保存密码。
使用随机生成的密钥,安全地存储在服务器上。 这些按键可以在以后不同的是加密的密码,直到改变,这将是有效的予以撤销。
使用PHP可以产生这样的随机密钥md5(uniqid(mt_rand(), true))
为了获得更好的安全储存它腌制,用dB散列。
实施例表:
login_keys (
user_id int,
key char(40), # sha1
salt char(15)
)
另外请注意,你应该启用HTTP cookie的唯一选择。
如果你想它的安全,不要让你的用户,让他们登录。
当设置会话时,请务必将ip地址绑定到会话ID,所以,如果有人会话后回升,它只能来自同一IP地址来实现的。 哟可以通过保持一个数据库(哈希)会话ID +哈希ipaddresses做到这一点。 我用PHPS功能http://php.net/manual/en/class.sessionhandler.php设置会话处理程序,并匹配与会议ipaddresses。
在我自己的网站,我发现要解决它根本就没有记住密码,用户名只有最好的方式工作时,提供更快的登录就不是一个不太安全的一个我也遇到过同样的问题。 事实是,没有确保消防方式保持密码绝对安全。 除了与新的浏览器,用户可以拥有自己的浏览器记住它。
但是,如果你必须有一个保存的密码,试试这个:
有多个cookie,2将是最容易的,并使用一个用于加密的密码,而其他持有的加密密钥。 在数据库中的密码将举行进一步的加密密码,请使用您的存储加密密钥(S)获得。 当您准备检查密码,提取值和加密密码。
希望这是有益的。 祝好运!
编辑:我可能误会了这一点,如果用户仍然登录,这是很好的做法来存储会话变量。