这个登录系统足够安全吗?

3
在研究添加一些新功能的登录系统时,我发现它并不是很安全。认证cookie是由用户ID、时间戳、版本、明文密码和cookie ID加密而成。至少我可以说我不是那样做的人,之前的开发人员这样做了。(是的,我知道应该将密码保存为哈希值而不是明文存储在数据库中。原始开发人员是这样做的,我还没有修复这个问题。)
因此,我在这里和网络上阅读了很多关于安全登录和安全cookie的内容。我能看出来,不安全的做法有多容易。
关于网站:
  • 这是一个电子商务网站,也有很多社区功能(留言板、画廊)
  • 登录页面强制使用HTTPS
  • 所有账户页面和结算页面也强制使用HTTPS
  • 更改密码或电子邮件地址需要提供当前密码
这是我的计划:
目标:
  • beable to be logged in in more than one place
  • need to relogin for secure parts of the store, only lasts 30-60 min, cookie set secure only
  • option to see all current logins
  • option to log out in all places
  • backend login is secure, and lasts longer. limited login for outside of office

      user gets page:
       no auth:
        have user sign in with username & pass          
        create new token
        expires =
         https on store: 30-60 min 
         backend in office: 5 days
         backend remote: 30-60 min?
         regular without remember me: session or 24 hours?
         regular with remember me: 30 days
        insert into user_session
        set cookie
       auth:
        token in db:
         set uid
         generate new token, new expires, insert into DB, remove old?
         upddate cookie
        token not in db:
         logout, requre sign in
    
    
    
      table user_session:
       uid
       uid_as   (for being 'logged in' as another user, admin feature only)
       token
       type
       ip address
       expires
       stamp
    
    
      cookie value: token|hash(token + user id, server key) 
    

根据我所阅读的所有内容,这就是我的结论。但我感觉好像还有什么遗漏。除了为整个站点使用HTTPS以外,是否还有其他方法可以使其更加安全?(目前这样做会引起一些问题,但我稍后会研究这个问题)


我没有看到与编程有关的内容。投票将其迁移到 Server Fault,那里似乎是相关主题。 - David Thornley
我看到了一个表模式和一个创建cookie值的算法。看起来像是编程。 - webbiedave
有什么方法可以防止会话固定攻击吗? - Wrikken
@Wrikken,会话ID(我称其为令牌)在每次访问页面时都会更改。它还仅使用来自cookie的会话ID(令牌)。 - Echo says Reinstate Monica
好的,那就是我唯一的关注点了;P - Wrikken
1个回答

1

听起来是一个很好的进步 - 你的 cookie 值仍然可能被另一个用户劫持,特别是如果用户没有 logout(销毁关于会话的数据库信息)。这只是需要注意的一点。

如果您想支持同时多个登录,您需要考虑所有人使用相同的令牌(不好的计划)或每个会话使用唯一的令牌。在后一种情况下,您将希望将会话绑定到 IP - 这也减少了从另一台计算机欺骗令牌的能力。

对于关键交易(如果有的话),您还可以要求用户通过 HTTPS 重新确认其密码。


  1. 是的,Cookie 值可以被劫持,我正在尽量减少这种情况。
  2. 是的,我计划为每个会话使用不同的令牌。至于将 IP 与之绑定,我们在很长时间之前就在当前系统中这样做了,但这给我们的客户带来了太多问题(我们有很多 AOL 的客户),现在的情况还是那样吗?
  3. 对的,对于关键事项,我计划让用户重新确认他们的密码。
- Echo says Reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接