我想输入这个存储安全系统的cookie密码,
当用户勾选“记住我”框时,它会存储这些cookie:
用户名为纯文本。
使用服务器存储在数据库中的完全随机密钥加密的密码(永远不会传递给客户端并且是特定于用户的)随每次登录而变化。
然后服务器在需要时使用加密密钥解密密码。
答案 0 :(得分:2)
没有违法行为,但为什么要重新发明轮子?
许多人已经实现了这个特定轮子的自己版本,为什么不搜索SourceForge?可重复使用的软件 - 您能否比找到可接受的(和测试的)解决方案更快地编写代码?
使用现成的构建基块进行咕噜声工作,然后转到有趣的部分; - )
答案 1 :(得分:2)
攻击者可以窃取其他人的cookie,然后登录而无需知道实际密码。他们只会发送相同的cookie然后进入。能够嗅掉线路上的流量,然后重新发送它是重放攻击。
最好的防御是使用SSL ,因此安全性是端到端的。如果你正在运行一个严肃的商业网站,那么你应该使用SSL,没有ifs ands或buts。使用SSL cookie将始终通过网络进行加密,因此,当攻击媒介从数据包嗅探变为必须从最终用户的硬盘驱动器读取cookie时,其内容无关紧要。
如果您的网站不是那么严重,请继续阅读。
在我的网站上,我获取用户的密码并连接他们的IP地址和一个秘密令牌并散列所有这些。该哈希存储在cookie中。然后在服务器上对它们进行身份验证,我重新计算哈希并验证它们发送的哈希匹配。
这会将cookie与特定的IP地址联系起来,因此第三方不能轻易地重复使用它。它还消除了解密cookie和发现密码的任何危险,因为散列(例如SHA256)是单向的,无法逆转。
另外,我希望您不要在数据库中存储原始明文密码。您正在存储密码哈希,是吗?并且还腌制它们以防止彩虹表攻击?
答案 2 :(得分:1)
Per @caf,将其添加为答案:
如果您要沿着这条路走下去,那里的cookie基本上存储了服务器的秘密,那么这个秘密绝对没有理由与用户的密码有关。无论如何,客户端无法解释该数据的含义/价值。
实质上,加密数据只是一个身份验证令牌,其中包含有关如何生成令牌的特殊规则。但是,将令牌设置为用户的加密密码只会增加风险,因为现在如果攻击者以某种方式从服务器获取加密/解密密钥,则他们拥有您的用户密码。你已经使令牌本身成为一个有吸引力的目标,因为它具有内在价值。
因此,您可以让服务器生成足够长的随机数,并将其存储在数据库和cookie中,而不是将加密的密码存储在cookie中,加密密钥存储在数据库中。因为它对客户端没有任何意义,所以对于令牌使用什么并不重要,只要它是随机的,很难猜测并且服务器可以验证它。不要打扰它与密码相关。
答案 3 :(得分:0)
正如Leonix所说,这可能最好留给以前开发过它并修复所有错误的其他人。特别是因为它与安全有关。
除此之外,我发现的一个明显缺陷是缺乏身份验证,或者对“重播”攻击的敏感性,有人只是盲目地发送他们可以从他们想要模仿的人那里复制的cookie数据。