我应该在每一页上重新生成_session_id吗?

Ene*_*oma 2 php session

我正在尝试为我的用户身份验证会话添加更多安全性.当用户登录我regenerate_session_id但我希望你的答案,如果我regenerate_session_id在每个页面上我认证用户将帮助我.

在每个页面上验证用户身份

<?php
    session_start();

    if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) {
        header("location: denied.php");
        exit();
    }
?>
Run Code Online (Sandbox Code Playgroud)

我把它改成了

session_start();

if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
    header("location: access-denied.php");
    exit();
} else {

session_regenerate_id(); }
Run Code Online (Sandbox Code Playgroud)

Chr*_*ker 6

您可以使用session_regenerate_id以防止会话固定攻击,其中攻击者获知给定用户的会话ID,然后"劫持"该会话ID以代替用户.

但是,必须小心.首先,您必须考虑异步请求.如果您有来自用户的许多并发请求,您将希望避免一个脚本在另一个脚本尝试重新生成时使用会话数据的情况 - 一个脚本正在使用另一个脚本试图销毁的数据.

此外,这确实增加了开销.重新生成每个请求可能是一种过度杀伤力.相反,请尝试保留请求计数器; 每10个请求(左右,任意选择),重新生成ID.

确保将参数传递为true- 您不希望或不需要旧的会话数据(请记住,仍然是并发请求).有关更多信息,请参阅(docs).

所有这一切 - 这种机制是一种"微观增强",它会给你带来比实际安全更多的虚假安全感.会话固定攻击并不常见,特别是如果您已经采取其他措施来加强安全性.没有什么可以替代,例如,使用HTTPS进行安全连接; 没有什么可以取代密码复杂性要