最近,我将jwt身份验证添加到我的网站中,因为我的站点前端与后端完全分离。我没有想到的是,我可以使用wp_nonce而不是jwt --在后端创建nonce,将其存储在前端,并将其与每个请求一起发送到过期为止。
wp现在的方法与jwt方法有什么缺点?
此外,非are被用来保护wordpress从csrf例如。除了正确设置cors规则(只允许前端域)之外,还有其他方法从csrf保护rest吗?
发布于 2021-01-28 12:43:58
我没有想到的是,我可以使用wp_nonce而不是jwt --在后端创建nonce,将其存储在前端,并将其与每个请求一起发送到过期为止。wp现在的方法与jwt方法有什么缺点?
Using不作为身份验证协议的替代物,或者作为会话标识符是不安全的。 A nonce不是身份验证或标识令牌。
使用它作为身份验证令牌将无法工作,或者更确切地说,它将发挥作用,但它的安全性将非常弱。
现在的目的是证明当用户采取行动时,他们打算采取该行动,该请求是故意的。这并不能证明用户是他们所说的那个人,也不能保证他们的身份。
如果它们用于身份验证,则用作检测重放攻击的测试,并避免攻击者对记录的登录请求表示不满,但它们不能用于验证和登录用户。
TLDR:这是个坏主意,不能用非idea来进行身份验证。坚持一个已知的好方法,如果你想要有保障和安全的话,这个方法是明确的,并且在战斗中变得强硬。
在编写本报告时,让我们测试WP当前的安全性,这是WP使用的实现:
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 );
}在建议的计划中,这项工作会简化为:
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_SALT或SECURE_AUTH_SALT in wp-config.php。
从那里发生的一系列事件,使我们可以模拟任何人在您的网站。减轻这一点将涉及到nonce_user_logged_out和设计一个方案,以插入更多的基于用户会话的数据,但这只是拖延了不可避免的。
https://wordpress.stackexchange.com/questions/382338
复制相似问题