什么是好的和安全的会话名称?

时间:2016-06-27 14:16:10

标签: php security session

背景

我已经成为一名php开发人员已有好几年了,但主要是使用开源CMS,如wordpress或drupal。这两个都以他们自己的方式管理会话,并且在大多数情况下我从未关注它们。现在我正在构建一个自定义网站而不使用这些cms,这意味着我需要自己管理会话。由于这有很多安全隐患,我想了解更多有关它的信息。我理解安全威胁会影响表单构建,网址和一般输入,但很少涉及会话威胁。

我在Chrome检查员中发现我的会话cookie名为“PHPSESSIONID”。这当然有点粗糙。所以我发现我可以使用php.ini设置session.name = "mysitename"来更改它,或者使用某些值(如session_name('mysite_' . $some_value);

)在代码中更改它

问题。

我应该如何设置此会话名称?是否有针对此的网络标准?我确实搜索了一个,但没有找到任何可能我的错误关键词。

设置此名称有什么安全隐患?我应该在名称中包含一些特定变量,还是由于某些可能的冲突而不包含变量。我真的从头开始在安全方面,所以任何信息都有帮助。

1 个答案:

答案 0 :(得分:2)

更改此名称不会产生很大影响,据我所知您不需要太在意这一点。 PHPSESSIONID是它的非正式名称,因此没有提供太多关于它的信息。

防止滥用会话的一个更重要的部分是使用任何形式的令牌。如果您需要更多相关信息,请告诉我。

另一个非常重要的方面是可能的SQL注入攻击,因为您处理敏感信息可能会产生严重影响。为了防止这种情况,我建议使用预准备语句,更多关于此here

的信息

但是回到你的会话,你必须在任何脚本的每个开始时调用session_sart并进行一些测试,我将在下面给你处理会话的方式(非常欢迎任何评论家)。此会话应设置一些标志,如安全标志和仅限http,更多关于php会话标志here

进一步的会话应该有一个有限的时间,并在此过期后自动丢弃。 另一个小问题是每次新会话开始时重新生成会话ID(值,而不是名称;)),这个function就是这样做的。只需在用户登录时调用它即可。

如果您有任何其他问题可以随时提出,我希望这会有所帮助。

这是我的函数,在每个文件的开头调用,当然除了登录页面:

function auth()
{   
    $curFile = basename($_SERVER["PHP_SELF"]);
    if($curFile == "login.php")
    {
        return;
    }

    $domain = $_SERVER["HTTP_HOST"];

    if(session_status() != PHP_SESSION_ACTIVE)
    {   
        session_set_cookie_params(0, "/", $domain, true, true);
        session_start();
    }

    $now = time();
    if (isset($_SESSION["discard_after"]) && $now > $_SESSION["discard_after"])
    {
        session_unset();
        session_destroy();
        session_set_cookie_params(0, "/", $domain, true, true);
        session_start();
    }

    session_regenerate_id(true);

    $_SESSION["discard_after"] = $now + 120;

    if ((!isset($_SESSION["angemeldet"]) || !$_SESSION["angemeldet"]) && basename($_SERVER["PHP_SELF"]) != "login.php")
    {
        header("Location: https://".$domain."/login.php");
        die();
    }
}

在我的登录文件中,我按如下方式设置会话:

session_set_cookie_params(1800, "/", $domain, true, true);
session_start();
session_regenerate_id(true);
//Do whatever you want to do to your $_SESSION
$_SESSION["angemeldet"] = true;
$_SESSION["name"] = "Fany name";
//...