Cookie安全

Jor*_* M. 1 security session-cookies google-fusion-tables

我有一个关于cookie安全性的快速问题,我想在stackoverflow社区运行之前,我实施它太远了.这将是我第一次在网站上实施用户登录,我希望对安全性非常谨慎,以免担心帐户遭到入侵.

这是我的假设安全解决方案:

  • 用户注册网站(通过电子邮件注册,使用Facebook登录等)并分配用户ID号.此号码是公开的,可用于访问用户的个人资料,在帖子中引用它们等.
  • 在注册时,还会为用户分配随机生成的ROWID,因为他们的信息存储在数据库中(托管在Google Fusion Tables上).此ROWID号码对用户隐藏,永远不会泄露.
  • 用户ID根据ROWID号加密,该号码存储在用户计算机上的cookie中.它从未被其他用户看到,理论上,这只能由用户查看.

该解决方案将允许"秘密"密钥(ROWID号),"消费者"密钥(保存在cookie中)和公共参考ID(用户ID).当然,所有这些都汇总到一个数据库中,网站可以快速访问它们.这听起来像是一个提供适当安全级别的计划,还是我还应该考虑其他什么?

And*_*tov 5

为了通过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,随机生成盐值.没有必要保守秘密.