这个cookie系统是否可以安全存储密码?

时间:2010-08-25 02:43:36

标签: security encryption cookies

我想输入这个存储安全系统的cookie密码,

当用户勾选“记住我”框时,它会存储这些cookie:
用户名为纯文本。

使用服务器存储在数据库中的完全随机密钥加密的密码(永远不会传递给客户端并且是特定于用户的)随每次登录而变化。

然后服务器在需要时使用加密密钥解密密码。

4 个答案:

答案 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基本上存储了服务器的秘密,那么这个秘密绝对没有理由与用户的密码有关。无论如何,客户端无法解释该数据的含义/价值。

  • 对于客户来说,它只是随机数据,因为它不知道密钥
  • 对于服务器,它与任何其他数据没有什么不同
    1. 客户独有,
    2. 服务器的秘密
  • 对于攻击者来说,它不比随机数相等的长度更多,也不是更随机(或类似地,难以暴力)。

实质上,加密数据只是一个身份验证令牌,其中包含有关如何生成令牌的特殊规则。但是,将令牌设置为用户的加密密码只会增加风险,因为现在如果攻击者以某种方式从服务器获取加密/解密密钥,则他们拥有您的用户密码。你已经使令牌本身成为一个有吸引力的目标,因为它具有内在价值。

因此,您可以让服务器生成足够长的随机数,并将其存储在数据库和cookie中,而不是将加密的密码存储在cookie中,加密密钥存储在数据库中。因为它对客户端没有任何意义,所以对于令牌使用什么并不重要,只要它是随机的,很难猜测并且服务器可以验证它。不要打扰它与密码相关。

答案 3 :(得分:0)

正如Leonix所说,这可能最好留给以前开发过它并修复所有错误的其他人。特别是因为它与安全有关。

除此之外,我发现的一个明显缺陷是缺乏身份验证,或者对“重播”攻击的敏感性,有人只是盲目地发送他们可以从他们想要模仿的人那里复制的cookie数据。