在 php 会话中use_strict_mode

2022-08-31 01:06:53

谁能解释一下php.ini配置中use_strict_mode负责什么?在文档中,它告诉我以下内容:

session.use_strict_mode指定模块是否将使用严格会话 ID 模式。如果启用此模式,模块将不接受未初始化的会话 ID。如果从浏览器发送未初始化的会话 ID,则会将新的会话 ID 发送到浏览器。通过采用严格模式的会话,保护应用程序免受会话固定的影响。默认值为 0(禁用)。

我的基本理解是,它总是为您创建一个会话ID,但是我已经看到了另一个配置选项。所以我假设我的理解是错误的。那么我们为什么需要它呢?(我看到的最接近的是它阻止了OWASP A9,但它并没有给我很多信息)。


答案 1

否,这不是会话自动启动。

也就是说,如果有人创建了一个会话ID并将其发送到您的服务器,并且PHP意识到到目前为止还没有使用该ID的会话(当严格模式打开时),PHP将创建一个新的,不同的会话ID,并将会话初始化为该新会话,而不是(当严格模式关闭时)会话ID的用户注入值。

PHP wiki 的 RFC 中概述了 PHP 中关于严格会话 ID 处理的更详细介绍和动机:征求意见:严格会话

因此,在关闭严格模式的情况下,用户可以决定她要使用的会话ID。

在打开严格模式的情况下,用户无法决定。

因此,当您不想允许用户预定义会话 ID 值时,需要使用它。您通常希望防止这种情况以减少攻击面。


答案 2

推荐