确保会话安全的最佳方式(咨询)


best way to secure sessions (consulting)

好的,是的,我已经阅读了关于这个主题的其他问题,但我还有几个问题,有些问题是几年前的。

无论如何,我正在为一家包含敏感客户信息的保险公司建立一个管理cp。例如密码、社会保险号和司机#。

首先问:php会话和cookie哪个更安全?根据我对cookie的理解,您可以将它们严格限制为http和SSL。不知道你是否可以在php会话中做同样的事情。似乎php会话也只是快速cookie。cookie似乎更灵活,也同样可靠。仅供参考,我只使用http和SSL的cookie。有一个很好的理由使用php会话在我的情况下?

第二问:我的会话/登录工作是这样的:*密码是加盐和散列的*会话长度为32个随机字符当用户输入正确的pw并绑定到用户的IP时,会话将被验证*当用户登录时,会话id和用户密码存储在2个单独的cookie

如果会话通过用户pw验证并绑定到用户的IP,我可以只拥有会话Cookie并删除pw Cookie吗?因为我认为这有点多余,因为你只能得到一个会话id,如果你输入正确的PW。我宁愿将会话id暴露在cookie中,而不是pw(尽管它仍然是咸的和散列的)。

如果我的两个问题能得到回答,我将不胜感激。欢迎提供额外的安全建议:D

注意:会话绑定到IP,因为它大大提高了安全性。我宁愿让我的用户在他们的IP更改时输入他们的pw有点不方便,因为我们的数据库中有ssn和驾驶执照#s。只有3-5个用户可以访问系统。

  • 是否将用户的密码存储在cookie中,不以任何形式表示。
  • 经常重新生成会话ID
  • 使用强哈希(没有MD5),如SHA512(也考虑扩展哈希)
  • 敏感数据应该在服务器端会话存储:
    • cookie随每个请求一起发送到cookie域,因此大大增加了被截获的机会。服务器端会话数据只在需要时输出。
  • 将会话绑定标识符作为认证令牌传递给每个敏感请求以避免CSRF
  • 不直接绑定IP。使用相同AP或私有ISP的两个人具有相同的IP,会话可能会混淆。
  • SSL并不神奇。不要太依赖它。
  1. 会话存储在服务器,cookie存储在客户端(浏览器)。用户的会话数据由cookie (Session ID)标识。

我认为会话更安全(你也可以应用一些加密来提高安全性)。

  1. 不要将用户密码存储在cookie中。即使是散列,也不是一个好的做法。您可以存储一个加密的序列化数组,其中包含必要的信息来验证用户:ip,用户代理,用户名,用户id,但不包括密码。

您也可以使站点(admin CP)仅在SSL上工作。这样,数据在网络上就不会以纯文本的形式出现。

cookie中的密码是否加盐和散列?注意——这个问题没有好的答案!

将会话绑定到ip上并没有多大帮助——ip很便宜,很容易被欺骗等等。我会使用SSL, cookie/会话,甚至一次性cookie,在每次页面浏览时消耗和重置。

会话存储在服务器上,可以是数据库、文件系统、memcache等。用户通过会话id绑定到会话,会话id存储在客户端cookie或URL中。两者都不是"非常非常"安全的,因为可以通过窃取会话id来劫持会话。但是,既然您已经将会话id绑定到IP,那么您已经做得足够了。

现在将密码存储在cookie中。不要这样做。从不。尽管它们是加了盐的哈希,但最好还是不要让攻击者看到它们。如果它们只存储在数据库中,则具有另一种级别的安全性,因为在这种情况下,攻击者也必须闯入数据库。

如果您在执行任何可能危及系统的重要操作之前使用session_regenerate_id()重新生成会话id,则会有所帮助。此外,还可以了解XSS和CSRF攻击以及防止它们的机制,如表单令牌。