gpt4 book ai didi

php - Cookie + 数据库 token + session 身份验证,我可以取消 session 吗

转载 作者:行者123 更新时间:2023-11-29 02:36:37 25 4
gpt4 key购买 nike

我有一个小网络应用程序,它使用了很多 ajax。有人登录后,我们需要持久化的是他们的user_id和group_id

我第一次进行身份验证的方式是,我只是将这些作为明文文本存储在 cookie 中 ($_COOKIE['user_id'], $_COOKIE['group_id'])。显然这很糟糕,因为您可以修改这两个值!

我不是经验丰富的程序员,也不需要为此应用程序提供非常惊人的安全性。但这很糟糕。

因此,我继续在数据库中创建一个 token ,它存储 user_id、group_id 和一个哈希 token ,然后将该 token 仅放在 cookie 中。一旦 token 通过身份验证(cookie 匹配数据库),user_id 和 group_id 将创建为 session 。

这更安全,但必须管理 user_id 和 group_id session (超时、重新初始化)与仅从 cookie 中获取它们的整个过程造成了很多麻烦,并使我的应用程序的实际功能不太可靠。

现在接受我的技能水平,并且我的应用程序的易于管理 + 强大的功能比高级别的安全性更重要......我想知道我是否可以取消 session ,并通过仍然做出妥协将 user_id 和组 id 与哈希一起存储在 cookie 中 - 即

COOKIE['token'] = user_id_val+group_id_val+hash_in_db

看起来像:23-144-jhwr8324398fjk2j49083223n23

所以我只需要一个小函数来解析该字符串并从中做所有事情。有人可以更改值,但显然哈希值不匹配。

这样可以吗?

最佳答案

您根本不需要 cookie(好吧, session cookie 除外)来进行身份验证。这是一个简单的无 cookie 身份验证示例:

session_start();

// $db is a pseudo object for database access

// Verify login
$auth = false;
if (isset($_SESSION['user_id']) && isset($_SESSION['user_hash'])) {
$user = $db->getUserById($_SESSION['user_id']);
if ($user) {
$hash = sha1($user->id.$user->salt);
if ($hash === $_SESSION['user_hash']) $auth = true;
}
}

// Make login
if (isset($_POST['login'])) {
$user = $db->getUserByCredentials($_POST['login'], $_POST['password']);
if ($user) {
$_SESSION['user_id'] = $user->id;
$_SESSION['user_hash'] = sha1($user->id.$user->salt);
// redirect...
}
// redirect to error page
}

当然,这还可以改进,增加针对各种攻击的防御机制,存储用户信息等,但这是基本思路。它比使用 cookie 更安全。

关于php - Cookie + 数据库 token + session 身份验证,我可以取消 session 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com