安全登录会话的高安全会话原则

时间:2017-05-16 10:42:27

标签: php security session cookies login

我开始关注与会话相关的登录过程安全性。

我已经在网上阅读了很多文章,但大多数都是陈旧的,现在没有考虑到工具,尽管原则基本上是一样的。我想和你分享我的理解,这样如果我说错了,你可以拍我的脸,作为有孩子的父母,也请你解释一下。

1)php.ini设置

这就是我认为我应该配置php.ini以获得适当的会话安全性。如果某些内容缺失,请告诉我。

  1. session.use_cookies = 1
  2. session.use_only_cookies = 1根据我对会话工作原理的理解,当用户连接到网站时分配给用户的唯一ID可以存储在URL(我想是附加的),cookie或两者中。此选项设置为on会对服务器说“嘿,我希望您将会话ID 存储在cookie"中。”
  3. session.cookie_secure = 1如果设置为on,则会在检测到HTTPS连接时将会话ID存储到cookie 中。我没有真正得到这个选项的效用:如果我购买SSL(TLS)证书,我的客户端将在HTTPS连接下仅与 服务器通信,对吧?如果HTTPS连接失败,我猜不会切换到HTTP,对吗?我认为它会显示CONNECTION_ERROR。如果是,那么会话cookie 总是通过HTTPS发送,那么如何将此选项设置为On会增加安全性呢?
  4. session.cookie_httponly = 1很明显,它是避免XSS攻击的重要功能,因为会话cookie只能通过HTTP连接检索,而不是任何人使用任何脚本语言作为JavaScript
  5. session.use_strict_mode = 1来自PHP Manual

      

    它指定模块是否使用严格的会话ID模式。如果启用此模式,则模块不接受未初始化的会话   ID。如果从浏览器发送未初始化的会话ID,则为新会话ID   被发送到浏览器。应用程序不受会话固定的影响   通过严格模式的会话采用。默认为0(禁用)。   注意:对于general,启用session.use_strict_mode 必需   会话安全。建议所有网站启用此功能。

    这似乎是一个重要的选择;但是为什么它默认设置为0呢?它具体实现了什么?因为我没有理解它的目的。有人可以让我成为一个具体的例子吗?

  6. 2)会话劫持

    为了使攻击者的生活复杂化,这些是我认为应该使用的工具。如果有人知道更多,请告诉我。

    1. php.ini - 正确的php.ini配置是基础。
    2. HTTPS连接 - 这样可以避免会话嗅探,因为客户端和服务器交换的数据都会被加密。
    3. 会话ID重新生成 - 在两种情况下重新生成会话ID:

      a)当用户登录到更高安全级别的区域时;

      b)每X次,例如20分钟,避免所谓的会话固定

      关于这部分,我想问你session_regenerate_id()session_create_id()之间的区别,因为我没有得到它。是否已创建session_create_id()仅用于解决PHP Manual中报告的session_regenerate_id()不稳定问题?为会话ID添加前缀的目的是什么?它是否像个人?何时以及为何我应该使用其中一种?

    4. 会话超时 - 在X时间不活动后,销毁登录会话,以便用户必须再次登录。
    5. 总结说,这些是我理解必须实施的具有安全会话的内容,特别是登录会话。通过这些实现,系统是否足够强大?或者我应该添加更多东西以使其更强大?

1 个答案:

答案 0 :(得分:1)

  
      
  1. session.use_strict_mode = 1来自PHP手册:[...]
  2.         

    这似乎是一个重要的选择;但是为什么它默认设置为0呢?

Dunno为什么默认情况下不启用它;可能是为了防止现有脚本可能出现的问题/副作用。

至于它的作用:

如果没有严格模式,如果我向您的应用发送一个不存在的会话ID abc123,它将使用该ID创建一个新会话。与其他可能的安全漏洞和会话固定的一部分相结合,这可能是危险的 例如,如果通过XSS漏洞,我能够向您的页面上具有管理员权限的用户发送链接,该用户将在浏览器中使用我的给定ID设置会话cookie,然后他们以管理员身份登录 - 然后我会知道他们的会话ID(因为我指定了它),所以我可以在浏览器中使用相同的ID创建会话cookie,然后我将以“管理员用户”的身份“登录”到您的站点。

严格模式可以防止这种情况发生。管理员用户使用我伪造的会话ID abc123访问您的网站。系统意识到具有该id的会话不存在 - 并使用新id 创建新会话,而不是使用id abc123创建新会话。所以网站管理员现在有一个我不知道的id会话,这意味着我不能通过伪造会话cookie继续我的攻击。<​​/ p>

  

关于这部分,我想问你session_regenerate_id()和session_create_id()之间的区别

session_regenerate_id为现有会话创建新ID。它会创建一个新的会话文件(使用默认存储机制时),并可选择删除使用旧会话ID命名的现有文件。它会使用新ID更新会话cookie。

session_create_id只创建一个新的会话ID,没有别的。它不会更新会话cookie,也不会更新会话存储。在这种情况下,这将是应用程序自己的责任。

  
      
  1. 会话超时 - 在X时间不活动后,销毁登录会话,以便用户必须再次登录。
  2.   

请注意,PHP的配置设置session.gc_maxlifetime实际上名称错误 - 实际上,它指定最小生命周期。 的会话文件可以由垃圾收集器清除 。但GC是随机触发的(取决于gc_probabilitygc_divisor),因此无法保证文件将“立即”擦除甚至接近其到期时间。

相关问题