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

时间:2010-09-16 16:24:00

标签: php security cookies authentication

在查看我们的登录系统以添加一些新功能后,我发现它不是很安全。 auth cookie是user id, stamp, version, PASSWORD IN THE RAW, and a cookie id的加密。至少我可以说我不是那样做的人,以前的开发人员做过的。 (是的,我知道密码应该保存为数据库中的哈希而不是纯文本。原始开发人员就这样做了,我还没有修复它。)

所以我在这里和网上做了很多关于安全登录和安全cookie的阅读。我可以看到不安全地做这件事是多么容易。

关于网站

  • 这是一个电子商务网站,也有很多社区内容(留言板,图库)
  • 登录页面强制为HTTPS
  • 所有帐户页面和结帐也都是强制HTTPS
  • 更改密码或电子邮件地址需要当前密码

这是我的计划:

目标:

  • 可以登录多个地方
  • 需要重新登录商店的安全部分,仅持续30-60分钟,cookie设置安全
  • 查看所有当前登录的选项
  • 在所有地方注销的选项
  • 后端登录是安全的,持续时间更长。在办公室以外的有限登录

      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之外,我的计划是否有任何问题或使其更安全的方法? (它目前会引起一些问题,但我稍后会对此进行研究)

1 个答案:

答案 0 :(得分:1)

听起来向前迈出了一大步 - 你的cookie值仍然可能被其他用户劫持,特别是如果用户没有logout(销毁有关会话的数据库信息)。只是需要注意的事情。

如果您想立即支持多次登录,则需要为所有(不良计划)或每个会话的唯一令牌考虑相同的令牌。在后一种情况下,您需要将会话绑定到IP - 这也会削弱从另一台计算机欺骗令牌的能力。

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