【问题标题】:Are CSRF tokens base64url encoded?CSRF 令牌是 base64url 编码的吗?
【发布时间】:2019-10-15 03:17:24
【问题描述】:

我正在开发一个从 cookie 标头解析 CSRF 令牌的应用程序。我想知道 CSRF 令牌是否使用 URL 安全字符进行 base64 编码(参见https://simplycalc.com/base64url-encode.php),以便我可以将它们与正则表达式匹配

[.a-zA-Z0-9_-]+

我能够找到有关 JSON Web 令牌 (JWT) 的文档,表明它们由用句点 ('.') 分隔的 base64url 编码部分组成,但我无法找到有关 CSRF 令牌的类似文档。

CSRF 令牌通常也仅限于某个字符集,还是它们可以包含任何字符?

【问题讨论】:

  • CSRF 令牌可以通过多种不同的方式生成,如果不知道哪个框架生成了这个特定的 CSRF 令牌,这是不可能回答的。什么框架正在生成有问题的 CSRF 令牌?

标签: csrf base64url


【解决方案1】:

CSRF 令牌是一个不透明的“nonce”,不包含任何信息——表单提交中的令牌和 cookie 或标头中的令牌只需匹配即可。如果您看到它们是 base64 编码的,那只是为了方便传输,但它不会解码为任何有用的东西,大多数时候只是随机字节。与 JWT 的 JSON 结构完全不同。

查看我当前的框架 (Laravel),它的 CSRF 令牌只是随机字符串(它们派生自 base64,但不是有效的 base64)。大多数其他框架也可能是这种情况。

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2018-07-28
    • 2012-02-23
    • 2020-08-23
    • 2011-08-07
    • 2014-05-17
    • 2011-09-24
    • 2014-04-29
    相关资源
    最近更新 更多