Jor*_* M. 1 security session-cookies google-fusion-tables
我有一个关于cookie安全性的快速问题,我想在stackoverflow社区运行之前,我实施它太远了.这将是我第一次在网站上实施用户登录,我希望对安全性非常谨慎,以免担心帐户遭到入侵.
这是我的假设安全解决方案:
该解决方案将允许"秘密"密钥(ROWID号),"消费者"密钥(保存在cookie中)和公共参考ID(用户ID).当然,所有这些都汇总到一个数据库中,网站可以快速访问它们.这听起来像是一个提供适当安全级别的计划,还是我还应该考虑其他什么?
为了通过XSS等方式防止cookie被盗,您可能需要考虑为每个IP地址发布唯一的cookie,然后确保cookie只能从该IP地址使用.如果您将cookie存储在数据库中,事情会变得复杂,因为您现在有多个cookie映射到同一个用户.
以下是如何避免这些问题:
Set-Cookie: userName=Alice; authCode=eeba95a4...
Run Code Online (Sandbox Code Playgroud)
其中:authCode = HMAC(ROWID,userName + ipAddr)
当您收到此cookie时,在数据库中查找用户,使用请求的ROWID和IP地址重新计算/验证cookie中的authCode.无需在数据库中存储cookie.
对于额外的加密点,将一个salt参数放入混合中:
Set-Cookie: userName=Alice; salt=59843...; authCode=eeba9...
Run Code Online (Sandbox Code Playgroud)
其中:authCode = HMAC(ROWID,userName + ipAddr + salt)
对于您生成的每个cookie,随机生成盐值.没有必要保守秘密.