How do WordPress Nonces Work?

时间:2018-03-21 作者:Кристиян Кацаров

我试图了解WordPress nonces在安全方面是如何工作的。nonce 表示一次使用的数字,但根据WordPress的说法,它的有效期可能长达24小时,这毫无意义。在此期间(同一客户机)可以使用9999次。

我认为WordPress nonce实际上是一个使用一次的数字,而nonce只对一次性使用有效,但事实并非如此。我想为了更好的安全性,一次性使用号码会更好,例如,你有一个评论系统,有人点击“回复”两次。由于两个请求中给出了一次性有效的nonce(相同的nonce),因此注释不是插入两次,而是插入一次。

我做错什么了吗?那些WordPress nonce的目的是什么?

2 个回复
最合适的回答,由SO网友:Dilip Gupta 整理而成

如果你阅读Wordpress Nonces in Codex, 他们已经相当公正地解释了这一点。其中一些关键点包括:

始终假定nonce可以被破坏nonces 和user cookies.current_user_can() 函数而不是wordpress nonces。

至于目的,我认为,它服务于多层安全的基本目的。阅读此Are Nonces Useless

SO网友:Mark Kaplun

正如您正确发现的,wordpress不使用字面nonce,而是一个足够好的近似值。

nonce的字面定义的实现问题是,您需要跟踪生成的所有数字,尤其是如果它们确实是随机的。这意味着将生成的nonce存储在DB中,这意味着每次管理页面刷新时都会有DB写操作,这可能会使服务器紧张。

Wordpress折衷方案是使用秘密哈希键和用户敏感上下文,将nonce生成为当天的哈希值。这样一来,可能的攻击时间限制在24小时内,很难猜出时间。如果您的站点位于HTTP上,并且您在公共WiFi网络上进行任何管理,那么仍然存在截获问题,但在这种情况下,您的整个身份验证都会暴露,而nonce暴露是您面临的最小问题。

结束

相关推荐

Nonce and widget

我已经筛选了几个小部件的代码,但没有发现其中任何一个处理nonce。我还查看了WP\\u Widget类,但也没有发现任何相关内容。这是抄本:(https://codex.wordpress.org/Widgets_API)class Foo_Widget extends WP_Widget { function __construct() { //something } public function widget( $a