【问题标题】:How does Symfony2 session fixation work?Symfony2 会话固定是如何工作的?
【发布时间】:2023-04-05 17:04:01
【问题描述】:

根据标准 2.4 文档,security.yml 配置文件允许以下配置选项:

session_fixation_strategy: none | migrate | invalidate

来源:http://symfony.com/doc/current/reference/configuration/security.html

但是,我无法在官方文档(或其他地方)中找到有关此选项实际作用或实际工作方式的任何详细信息。

那么,如果我将此选项设置为“迁移”或“无效”,这将如何影响我系统中的会话处理?例如,如果我将其设置为“无效”,这是否意味着当用户导航到不同的安全上下文时,上下文本地会话无效?

【问题讨论】:

    标签: security symfony


    【解决方案1】:

    简而言之:

    • NONE:会话未更改
    • MIGRATE:会话 id 被更新,属性被保留
    • INVALIDATE:会话 ID 已更新,属性丢失

    详细说明:

    1. 无策略: 默认会话实现中没有(应该)做任何事情,因此会话从一个上下文到另一个上下文被维护。

    2. 迁移策略: “将当前会话迁移到新的会话 ID,同时保留所有会话属性。” (会话存储应该重新生成当前会话。) “重新生成代表此存储的 id。 此方法必须调用 session_regenerate_id($destroy) 除非此接口用于为单元或功能测试而设计的存储对象,其中真正的 PHP 会话会干扰测试。注意 regenerate+destroy 不应该清除内存中的会话数据,只会从持久存储中删除会话数据。” 因此,会话从一个上下文保留到另一个上下文。

    3. 使策略无效: “清除所有会话属性并闪烁并重新生成会话并从持久性中删除旧会话。” 因此会话从一个上下文重新生成到另一个上下文。

    您的问题并未透露您要获取什么样的会话数据。
    但无论如何,不​​会为不同的安全上下文生成单独的会话: http://symfony.com/doc/current/reference/configuration/security.html#firewall-context

    与安全(身份验证)相关的数据存储在单独的密钥下(基于防火墙名称)。因此,例如,如果您有一个名称为“main”的防火墙,则身份验证令牌将存储在“_security_main”下,如果您有一个名称为“foo”的防火墙(单独的上下文),则用户和相关令牌数据将存储在'_security_foo'等下。

    所以除了 ->getToken ->getUser (等)之外,如果您使用“无”或“迁移”会话策略,其余会话变量将在不同的上下文中可用。

    查看会话界面了解详情(引用来自这些文件) 供应商/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/SessionInterface.php

    以及默认实现: 供应商/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Session.php

    【讨论】:

    • 但是何时这里描述的迁移或失效会发生?是当用户导航到不同的安全上下文时? (如果是这样,这在实践中意味着什么?)
    • 它发生在“交互式身份验证尝试成功之后和 SecurityContext 填充令牌之前,并且仅由从 AbstractAuthenticationListener 继承的类。”请参阅SessionAuthenticationStrategyInterface 了解更多信息。不,当用户导航到不同的安全上下文时不会调用它。 (正如我在上面的回复中已经说过的那样。)
    • 感谢您花时间解释!
    • 简单来说一个简单的例子 1. 会话开始(还没有用户),2. 用户导航到限制区域,3. 重定向到表单登录,4. 登录成功。然后我们已经有了一个包含可能值的会话,而且现在我们有了一个经过身份验证的用户。这是会话迁移发生的时间,也是我们可以决定如何处理“先前”会话的时间。丢弃、合并等
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2011-02-22
    • 2019-02-14
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多