php – WordPress不刷新服务器上的nonce令牌

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – WordPress不刷新服务器上的nonce令牌脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我的插件中有一个与此类似的表单:

<!-- Client form -->
<form>
   <?PHP wp_nonce_field('my_form','_my_token'); ?>
   <!-- Additional form fields -->
</form>

它会生成这两个字段:

<input type="hidden" id="_my_token" name="_my_token" value="abcdefghij" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/tools.PHP?page=my-plugin%2Fplugin.PHP" />

当我提交此表单时,我会这样验证:

//Server's side check
if(!wp_verify_nonce($_POST['_my_token'],'my_form')){
   echo 'Invalid token! Expected token: '. wp_create_nonce( 'my_form');
   exit;
}

问题是在服务器上,令牌永远不会改变,它始终是相同的,并且验证总是在此步骤中失败.如果我从wordpress注销然后再次登录,则客户端令牌已更改,但在服务器上它是相同的.

我在本地测试了这个,当我再次登录时,它总是在两侧更改令牌,但在我的生产环境中,它只在客户端更改.

它似乎以某种方式缓存,但不确定究竟是什么.我使用过WP Super Cache插件,但它现在已被禁用,此问题仍然存在.我在我的生产网站上启用了多站点功能,但我不相信这与它有关.有任何想法吗?

解决方法

你期望你的随机数改变的时间框架是什么时候?

在没有其他更改的连续刷新时,页面加载之间的随机数可能相同.基本上,如果你坐在那里击中F5,你将获得相同的随机数.

这是设计的.为了使用它们进行验证,需要在短时间内无意义地创建随机数.

再一次,基本上,如果这不起作用,你永远无法验证你的随机数.当你创建它时,值将是一回事,当你重新创建它以验证它时,值将是另一个.验证总是会失败.

wp_verify_nonce()可以接受一个nonce(其他所有相等)最多24小时(见the WP Codex page).您可能需要等待更长的时间才能收到不同的随机数.

可能发生的其他系统事件可能导致生成新的nonce.我自己从来不需要这样做,但似乎你可以使用wp_nonce_tick()来慢跑这个过程.

wp_create_nonce()(由wp_nonce_field()直接使用)和wp_verify_nonce()中的任何一个都可能已被某个插件重写,因为它们都在pluggable.PHP中定义并且可用于覆盖.一个写得很好的WP-aware CDN或其他缓存解决方案可以完全实现持久化会话.我不知道Super Cache是​​否这样做.

或者,如果您的系统配置尚未执行此操作,您可以选择自己重写这些功能.这将是安全代码并且要小心编写安全代码:开源安全代码最大的优势在于它是经过同行评审的,而您的(新)代码可能不一样.

脚本宝典总结

以上是脚本宝典为你收集整理的php – WordPress不刷新服务器上的nonce令牌全部内容,希望文章能够帮你解决php – WordPress不刷新服务器上的nonce令牌所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: