在过去,我编写了一个CMS,其中通过两个cookie在HTTP请求中记住经过身份验证的用户:
用户令牌 - 一个随机的多字符(例如 10 - 数字长)字母数字字符串,它与数据库中的实际用户ID相关。
身份验证令牌 - 一个随机的多字符(例如 100 - 数字长)字母数字字符串,曾经哈希,必须与数据库中所述用户ID的存储值匹配。
我的问题(对于新的CMS)如下:
使用两个Cookie有什么意义?如果我改为使用单个 110 - 数字长令牌,而曾经哈希,则必须与某些的存储值匹配,这不是那么安全吗? strong>数据库中的用户ID。当在数据库中找到此令牌的匹配项时,相关的用户ID将被视为经过身份验证的用户。
答案 0 :(得分:1)
将它们分开的最佳理由是让您的代码更易于管理,可移植,并与其他人一起玩。
如果安全性是您唯一关心的问题,那么将用户和身份验证令牌组合成单个加密令牌会更安全,当且仅当两个序列都是通过不会导致任何特定字符更多的方法生成的重量很大。原因在于组合这两个值的行为本质上是一个额外的简单加密步骤,同时也是一个更大的加密密钥,因此更难以欺骗或破解。
角色的重量是指它发生的可能性。许多哈希或加密数据的方法很容易破解(Excel's horribly insecure password for one)。主要原因是由于某些字符更容易出现,因此许多字符也可以替代其他字符。最终的加密结果包含数十万个非预期和未知的加密密钥。 (尝试使用excel cracker作为例子)
但是,将两个值组合起来存在一些缺点,主要是性能和可维护性相关。
我自己并不是一个顺从者。然而,在许多事情中,人群将流向阻力最小的道路。通常情况下,只有在经验表明其他方式存在更大问题之后,常见做法才会变得普遍。这是其中一个案例。
最小的安全影响加上需要一个cookie而不是两个,用于便携性较差且性能较差的平台。在一天结束时,这是你的电话。