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是??否这样做. 或者,如果您的系统配置尚未执行此操作,您可以选择自己重写这些功能.这将是安全代码并且要小心编写安全代码:开源安全代码最大的优势在于它是经过同行评审的,而您的(新)代码可能不一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |