首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wp_nonce对jwt

wp_nonce对jwt
EN

WordPress Development用户
提问于 2021-01-28 09:41:16
回答 1查看 427关注 0票数 0

最近,我将jwt身份验证添加到我的网站中,因为我的站点前端与后端完全分离。我没有想到的是,我可以使用wp_nonce而不是jwt --在后端创建nonce,将其存储在前端,并将其与每个请求一起发送到过期为止。

wp现在的方法与jwt方法有什么缺点?

此外,非are被用来保护wordpress从csrf例如。除了正确设置cors规则(只允许前端域)之外,还有其他方法从csrf保护rest吗?

EN

回答 1

WordPress Development用户

发布于 2021-01-28 12:43:58

我没有想到的是,我可以使用wp_nonce而不是jwt --在后端创建nonce,将其存储在前端,并将其与每个请求一起发送到过期为止。wp现在的方法与jwt方法有什么缺点?

Using不作为身份验证协议的替代物,或者作为会话标识符是不安全的。 A nonce不是身份验证或标识令牌。

使用它作为身份验证令牌将无法工作,或者更确切地说,它将发挥作用,但它的安全性将非常弱。

现在的目的是证明当用户采取行动时,他们打算采取该行动,该请求是故意的。这并不能证明用户是他们所说的那个人,也不能保证他们的身份。

如果它们用于身份验证,则用作检测重放攻击的测试,并避免攻击者对记录的登录请求表示不满,但它们不能用于验证和登录用户。

TLDR:这是个坏主意,不能用非idea来进行身份验证。坚持一个已知的好方法,如果你想要有保障和安全的话,这个方法是明确的,并且在战斗中变得强硬。

别乱翻你自己的密码

在编写本报告时,让我们测试WP当前的安全性,这是WP使用的实现:

代码语言:javascript
复制
function wp_create_nonce( $action = -1 ) {
    $user = wp_get_current_user();
    $uid  = (int) $user->ID;
    if ( ! $uid ) {
        /** This filter is documented in wp-includes/pluggable.php */
        $uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
    }
 
    $token = wp_get_session_token();
    $i     = wp_nonce_tick();
 
    return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
}

在建议的计划中,这项工作会简化为:

代码语言:javascript
复制
function wp_create_nonce( $action = -1 ) {
    $i     = wp_nonce_tick();
    return substr( wp_hash( $i . '|' . $action . '||', 'nonce' ), -12, 10 );
}

因此,用户需要知道wp_hash使用的操作、当前滴答和盐。我们会知道这个动作,现在的滴答是一个简单的时间计算与一些四舍五入,因此我们只需要野蛮的盐。

我们可以通过调整wp_create_nonce来实现这一点,以使用wp_hash的一个版本,该版本遍历wp_salt的每一个可能的值。这将给我们提供AUTH_SALTSECURE_AUTH_SALT in wp-config.php

从那里发生的一系列事件,使我们可以模拟任何人在您的网站。减轻这一点将涉及到nonce_user_logged_out和设计一个方案,以插入更多的基于用户会话的数据,但这只是拖延了不可避免的。

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

https://wordpress.stackexchange.com/questions/382338

复制
相关文章

相似问题

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