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

标签 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 之外,我的计划或使其更安全的方法是否有任何问题? (它目前会导致一些问题,但我稍后会研究这个)

最佳答案

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

如果您想一次支持多次登录,您需要考虑对所有人使用相同的 token (糟糕的计划)或每个 session 使用唯一的 token 。在后一种情况下,您需要将 session 绑定(bind)到一个 IP - 这也会降低从另一台计算机欺骗 token 的能力。

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

关于php - 这个登录系统足够安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728642/

相关文章:

javascript - req.cookies 返回 undefined 但 cookie 已设置

php - 独立时替换单词

c# - SSRS 外部组件 : SecurityPermission in Preview Pane?

javascript - OAuth2 重定向 URL 应该指向前端还是后端?

http - 用 HTTP GET 请求设置 cookie 可以吗?

security - 您如何确保用户知道他们在您的网站上?

php - 图像在移动设备上正确旋转,而不是在桌面上

javascript - 通过 php 引入 img 部分时图像不显示

php - 如何使用 CodeIgniter 从数据库中检索数据?

android - 为什么我的 Android 手机通过未知服务器发送数据?