php - 成功登录后重新生成 session ID 是否足以防止 session 固定?

标签 php security session

我读了a guide目前,我对此有点困惑:

To address this weakness, it helps to understand the scope of the problem. Session fixation is merely a stepping-stone—the purpose of the attack is to get a session identifier that can be used to hijack a session. This is most useful when the session being hijacked has a higher level of privilege than the attacker can obtain through legitimate means. This level of privilege can be as simple as being logged in. If the session identifier is regenerated every time there is a change in the level of privilege, the risk of session fixation is practically eliminated:

<?php
$_SESSION['logged_in'] = FALSE;
if (check_login())
{
  session_regenerate_id();
  $_SESSION['logged_in'] = TRUE;
}
?>

如果我理解正确的话,我只需要做一个session_regenerate_id()在我分配像 logged_in = true 这样的值之前或 user_id = id然后我做了一个防止 session 固定的保护?

这就够了吗?我还能做什么?

最佳答案

实际上, session 固定最常见的情况是攻击者将放置一个链接,例如到您的主页或登录页面,在 url 上设置 session ID(作为 GET 变量)并等待一些用户登录。由于攻击者知道这些用户的 session ID,并且可以在 url 中设置此 session ID,因此攻击者可以重新访问注册用户的个人资料页面/仪表板等链接并冒充此用户。

因此,为了防止此类攻击, session ID 重新生成就足够了,因为攻击者仍然使用未经身份验证的 session 。您可以采取的另一个步骤是不接受 url 中的 session ID。为此,您必须设置(如果您可以在服务器上访问此文件,则在 php.ini 中或通过 ini_set)设置以下内容:

  1. session.use_only_cookies 应设置为 TRUE(仅使用 cookie 作为 php session ID,不要通过 url 传递)
  2. session.use_trans_sid 应设置为 FALSE(如果禁用 cookie,则不应通过 url 传递 session ID)

这样,攻击者甚至无法为未经身份验证的 session 设置 session ID。

关于php - 成功登录后重新生成 session ID 是否足以防止 session 固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461835/

相关文章:

node.js - 如何使用 AWS Lambda 中的完整请求 URL 仅在某些页面上执行逻辑

security - 如何验证域凭据(来自 native 代码)?

javascript - 如何在 AngularJS 中存储用户 session ?

php - php 文件中的 jQuery 和 Uploadify session

php - 具有 OpenID Connect 和 PKCE 的 Azure B2C

php - 在Web服务器上转换音频文件

javascript - 简单JavaScript数组innerHtml中的php代码块

php - 我是否正确使用了 PHP 的 crypt() 函数?

php - $_SESSION 仅适用于 website.com,不适用于 www.website.com

php - 如何对齐 Bootstrap 缩略图