首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JWT + cookies进行会话身份验证时存在安全问题?

问使用JWT + cookies进行会话身份验证时存在安全问题?
EN

Security用户
提问于 2019-04-22 19:02:28
回答 1查看 2.1K关注 0票数 0

试图使我的头脑,而不是使用传统的$_SESSIONS,以保持用户登录跨页。在cookie中存储JWT以验证用户会话是否存在安全问题?

下面是我想要做的事情的一个简单的例子:

config.php

代码语言:javascript
复制
$key = "secret123";

login.php

代码语言:javascript
复制
use Firebase\JWT\JWT; // A simple library to encode/decode JWT

require 'config.php';

// ... assumed valid user/pass, set cookie session

$token = ['uid' => 123];    
$jwt = JWT::encode($token, $key);    
setcookie('jwt', $jwt);

// redirect to private page

私有_page.php

代码语言:javascript
复制
require 'config.php';

if (isset($_COOKIE['jwt'])) {

    // check if JWT is tampered
    try {
        $decoded = JWT::decode($_COOKIE['jwt'], $key, ['HS256']);
    } catch (Exception $ex) {
        echo 'Invalid authentication';
    }

    echo 'You are logged in as uid '.$decoded['uid'];
}
else {
    echo 'You are NOT logged in';
}

这个实现是否足够安全,我还应该考虑什么?

EN

回答 1

Security用户

发布于 2019-04-22 19:47:27

当使用JWT而不是session cookies时,有几个问题:

  • 客户端可以查看存储在JWT令牌中的数据。对于会话,此数据将保留在服务器上。
  • 注销是很复杂的。当用户注销应用程序时,很难阻止JWT令牌有效。
  • JWT中的数据可能已过时。如果用户更改了他的用户名,他仍然有一个有效的JWT令牌,其中包含了他以前的用户名,而数据库中已经不存在了。
  • JWT库中存在一些bug(甚至是规范?)这降低了对JWT系统的信任。特别是,让客户机提供JWT类型(HS256或RS256)的决定被认为是危险的。
  • 它依赖于你需要的钥匙来保持安全。如果有人妥协了你的钥匙,他们可以伪造有效的令牌。

JWT令牌的有效使用涉及单点登录实现,特别是涉及多个系统的OpenID连接。他们不是一个好的替代传统的会议。

一些链接:

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/207849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档