0

我对安全性有点陌生,所以我想知道是否有人可以发光。

如我错了请纠正我...

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

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

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

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

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

感谢您清除此问题。

4

2 回答 2

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(是否只允许cookies,不通过via _GET

在这里阅读更多:http: //sg.php.net/manual/en/session.configuration.php

于 2012-05-07T06:47:34.843 回答
1

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

会话 id 不一定是一个标记(强烈的含义)。它用于识别用户,但不说明他是谁或他拥有什么样的访问权限。

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

于 2012-05-07T06:58:58.163 回答