首页 > 解决方案 > 关于智威汤逊的问题

问题描述

所以我目前尝试使用 nodejs jwt cookie 设置“记住我”功能。 在这里,我找到了一个加密 cookie 的示例。我也看了他们的介绍。现在我计划使用这个中间件来表达来存储 user_id 以便与 mysql 数据库进行识别。
我的问题是:

我目前主要担心的是,当有人可以制作令牌时,他可以设置他的 user_id 并可以访问任何帐户。如果有人可以为我澄清这一点,我会很高兴。

标签: node.jsexpresssecurityjwtbackend

解决方案


问:在 jwt 站点上有一个调试器,当我更改密码时,如果使用密码对有效负载进行加密,只有签名更改不会更安全?

JWT 的主要要求是它是数字签名的。如果您将敏感数据放在 JWT 中,那么您还需要对其进行加密。但我强烈建议您不要将敏感数据放在那里,因为如果用户丢失了他的 JWT 令牌,那么您会希望将损失降到最低。例如,在OWASP 果汁店Web 应用程序(故意不安全的 Web 应用程序,目的是教人们安全)中,他们将用户的密码哈希放在 token/ 中。这允许攻击者通过本博客中演示的跨站点脚本恢复用户密码。

Q:secret 有多少个字符不能被暴力破解 512, 1024 2048?

取决于您使用的 JWT 算法。如果您使用的是 HMAC,那么 256 位(32 字节)就足够了,远远超出您的需要。如果您使用的是 RSA,那么 2048 位(256 字节)是最佳实践。

问:秘密暴力破解有多快?如果暴力破解速度很快,应该多久更改一次?

假设量子计算机没有成为现实(如果量子计算机确实成为现实,那么所有的赌注都没有了),在宇宙的生命周期中使用地球上的所有计算机并不是暴力强制的。密码学家是非常聪明的人,他们以这种方式设计这些算法。例如,如果您想了解 RSA 安全性,请从查看通用数字字段筛和攻击它的运行时间开始。:-) 这不是蛮力——蛮力是一种缓慢而愚蠢的攻击——而是一种基于模数代数特性的智能算法。

因此,总而言之,为您选择的算法使用推荐的密钥大小,除非您有理由相信它已被泄露,否则不要担心轮换密钥。如果只有一个地方需要验证令牌并且该地方与生成令牌的地方相同,那么 HMAC 是一个不错的选择。但是,否则您最好使用像 RSA 这样的公钥算法。

问:使用上述模块保护令牌的最佳做法是什么?另外如何设置令牌(使用示例仅显示如何读取)?

由于您将其放入 cookie 中,因此请遵循 cookie 的正常最佳实践(安全、HttpOnly 等...)。


推荐阅读