nonce并不是魔法子弹,只要在任何地方应用它,你的网站就会变得更安全。从广义上讲,nonce应该只应用于已登录的用户,而应用于未登录的用户则用处不大。即使对于已登录的用户,也可能存在不需要nonce的情况(例如在读取公共可用信息时)。
。。。。但是在编码时,在任何地方应用nonce都比重复检查用户是否登录要容易得多。尽管如此,如果一个页面可以保持打开一天以上并且仍然保留其所有功能对您来说很重要,那么这就是解决方法——删除不需要的nonce。
您描述的nonce问题是WordPress没有按照定义实现nonce的结果。nonce应该在每次页面加载时都是唯一的,而WordPress会重复使用它们24小时。这具有巨大的性能和体系结构优势,因为它消除了将它们存储在某处的要求,但会导致像您描述的那样的问题,如果不每隔24小时“强制”重新加载页面,这些问题很难消除。因此,解决问题的另一个解决方案是使用自己的逻辑重写nonce api以生成一次性nonce,或者为未登录的用户使用不同的时间间隔。
为什么不在JS中以某种方式检测过期?因为nonce是使用秘密的“SALT”密钥生成的,而重建计算的唯一方法是在JS中公开它们,此时它们将不再是秘密的。