什么是sessions_ids(令牌)以及如何使用出于安全原因?

时间:2012-05-07 06:18:58

标签: php security session token

我对安全有点新意,所以我想知道是否有人可以发光。

如果我错了,请纠正我......

令牌只是使用session_id时使用的术语吗?

另外,我应该使用session_id(或令牌?)到底是什么?我知道它出于安全原因,但是我应该在用户登录时给用户一个新的session_id吗?

即。 :在我的所有php页面中,它应该是

if(isset($_SESSION['token'])){
 // html body
}

所以如果用户没有会话令牌,他们就不会访问该页面了吗?

感谢您清除此事。

2 个答案:

答案 0 :(得分:1)

会话ID用于标识服务器端会话信息,如代客密钥。当传递有效ID(通过任何方式)时,PHP可以访问数据。

会话通常用作存储用户身份验证详细信息的方法。成功登录网站后,您可以启动会话以存储一些用户数据,以便后续页面查看可以决定是否允许使用私人信息。

例如,登录后您可能有:

session_start();
session_regenerate_id(true); // avoid trivial session fixation
$_SESSION['valid'] = true;
$_SESSION['user_id'] = 123; // identify the user
// whatever else you want to add in your session
header('Location: /index.php'); // redirect the user after signing in

$_SESSION['valid']是防止会话采用攻击的令牌;通过使用session_regenerate_id,这变得不那么重要了。在后续页面查看时,您可以编写此代码以检查会话是否有效以及用户是否已登录:

session_start();
if (!isset($_SESSION['valid'])) {
    die("Invalid session");
}
// do stuff with $_SESSION['user_id']

会话ID可以主要通过两种方式传递:通过cookie(通用)或通过$_GET(不常见)。会话ID的传递方式由.ini设置决定:

  • session.use_cookies(是否完全使用cookies)
  • session.use_only_cookies(是否只允许使用Cookie,不通过_GET传递)

在此处阅读更多内容:http://sg.php.net/manual/en/session.configuration.php

答案 1 :(得分:1)

您可以将令牌视为密钥卡 - 通常,如果您的凭据有效,您会向服务器发送登录请求,该服务器会返回新令牌。如果您随后从服务器请求数据,则只需“显示”该令牌而不是重新发送凭据。因此,令牌用于隐藏信息。

会话ID不一定是令牌(具有强烈意义)。它用于识别用户,但没有说明他是谁或他拥有什么样的访问权限。

但是,如果您在会话中存储有关用户及其访问权限的信息(例如$_SESSION['userId'] = 17; $_SESSION['loggedIn'] = true;),则会话ID将成为令牌 - 将其发送到服务器会识别用户并且服务器可以从是应该授予还是拒绝访问。在会话中存储另一个令牌没有任何意义,因为隐藏未发送到客户端的信息是过度的。您可以安全地在会话中存储有关用户的信息,然后使用会话ID作为“获取”该信息的标记。