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

Php 这个登录系统足够安全吗?,php,security,cookies,authentication,Php,Security,Cookies,Authentication,在查看我们的登录系统以添加一些新功能后,我发现它不是很安全。auth cookie是原始的用户id、戳记、版本、密码和cookie id的加密,至少我可以说我不是以前的开发人员那样做的。(是的,我知道密码应该保存为数据库中的散列而不是纯文本。最初的开发人员就是这样做的,我还没有解决这个问题。) 所以我在这里和网上读了很多关于安全登录和安全cookie的书。我可以看出不安全地做这件事是多么容易 关于网站 这是一个电子商务网站,也有很多社区内容(留言板、图库) 登录页面被强制使用HTTPS 所有帐

在查看我们的登录系统以添加一些新功能后,我发现它不是很安全。auth cookie是原始的
用户id、戳记、版本、密码和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值仍然可能被其他用户劫持,特别是如果用户没有
注销
(销毁有关会话的db信息)。只是一些需要注意的事情

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


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

我在这里看不到任何与编程相关的内容。投票迁移到服务器故障,它在主题中显示。我看到一个表模式和一个创建cookie值的算法。看起来像是在编程。有什么可以阻止会话固定的吗?@Wrikken会话id(我称之为令牌)在每次访问页面时都会被更改。它也只使用cookie中的会话id(令牌);P1)是的,cookie值可能被劫持,只是试图最小化它。2) 是的,我计划在每个会话中使用不同的令牌。至于将IP绑定到it上,我们在很早以前就用我们现有的系统实现了这一点,但它给我们的客户带来了很多问题(我们在aol上有很多客户),情况是否仍然与当时一样?3) 是的,我计划让用户重新确认他们的密码。