假设我有一个加密安全的随机生成的字符串,我将分隔符和用户的用户ID附加到该字符串并将其用作会话ID。用例是防止冲突。这是否会使我的系统不如使用随机生成的字符串那么安全?
答案 0 :(得分:1)
让我们将答案分成两个假设:
如果您已经以其他方式(不同的字段,不同的cookie等)发送用户ID,并且攻击者可以访问会话ID,那么您的方法不会为实现添加任何攻击面因此风险保持不变。
如果不以其他方式发送用户ID,那么您向攻击者提供可能在其他攻击中滥用的其他信息。这有多危险取决于应用程序中用户ID的重要性。
最后,我担心你的推理。如果有任何合理的数学碰撞机会,那么你的sessionID不足以达到你试图使用它的目的。安全方面的错误。
答案 1 :(得分:0)
如果碰撞是一种风险,那么您的会话标识符几乎不包含熵是安全的。
来自OWASP Session Management Cheat Sheet:
如果使用熵为64位的会话ID,则需要一个 攻击者至少292年成功猜出一个有效的会话ID, 假设攻击者每秒可以尝试10,000次猜测,100,000次 Web应用程序中提供的有效同步会话
因此,如果您的会话标识符可以在没有尝试的情况下成功猜到,那么您就会遇到更大的问题。如果系统本身生成碰撞的标识符,则需要紧急审查您的熵源。
要回答您的问题,引入用户ID的风险是,如果您的会话标识符被泄露,攻击者可以立即识别出多汁的用户ID。也就是管理员或root帐户。此外,在添加代码时,应用程序的复杂性也会增加。当保持尽可能简单以解决应用程序面临的风险时,安全性最佳。额外的代码意味着更多的攻击面,以及实施漏洞的额外可能性。
总之,确保您的会话标识符具有至少64位的熵并且熵源是好的(例如,使用CSPRNG而不是PRNG或使用您的应用程序独有的熵源)。