Nonce failing in IE

时间:2017-03-31 作者:Matt Churchyard

我有一个奇怪的问题,似乎会影响IE,但不会影响Chrome(我没有尝试过任何其他浏览器)

我正在使用以下代码生成一个带有nonce的表单-

<?php wp_nonce_field(\'solution-reg\') ?>
我目前有代码输出整个$_REQUEST 数组,以便我可以看到nonce字段与表单数据一起提交-

Array ( [_wpnonce] => a7250b35a1 [_wp_http_referer] => /path-removed-for-stackexchange/ [..more fields..] ) 
在我的代码中,我调用verify函数,如下所示

if( !wp_verify_nonce($_POST[\'_wpnonce\'], \'solution-reg\') ){

    $this->renderer->addData(\'error\', __(\'Invalid request\', \'...\'));
    return false;
}
在Chrome中,我不能让它失败,每次尝试都会进入下一页。在IE中,第一个请求总是给我“无效请求”错误。如果我再次点击表单提交按钮,它将正常运行。

我认为唯一可能影响它的是一些javascript,它使用data-validate="1" 属性,由窗体触发.submit 处理程序,但由于它似乎不会影响在表单中传递的nonce值,我看不出这会如何影响nonce验证。

我真的很难看到IE有什么不同之处,会影响nonce是否正确验证。

编辑:(tl/dr我放弃)

记录对wp\\u create\\u nonce的调用似乎表明,如果我在IE中加载页面,它永远不会被调用。如果我添加一些随机查询字符串变量,它就会被调用。这意味着要缓存到某个地方,但我就是不明白。标题显示max-age 0, no-cache 立即到期。Total Cache插件已启用,但无法看到,因为chrome很好。我最终禁用了nonce,因为我真的没有任何其他答案。

1 个回复
SO网友:Mark Kaplun

对于未登录的用户,不应使用nonce。您不应该在任何完全或部分页面缓存方案中使用nonce。与多次给人的印象不同,只是在没有具体原因的情况下到处撒播nonce并不能提高网站的安全性,并且可能会给未登录的用户带来实际问题。

相关推荐

Using nonce in menu item

我在主标题菜单中有一个注销链接,当你点击链接注销时,你会被重定向到页面,询问你是否真的想注销。我知道它这样做是因为菜单URL中没有nonce。我的问题是:是否可以在编辑菜单屏幕的CMS外观>菜单中添加nonce?url类似于:example.com/wp-login.php?action=logout&redirect_to=http://example.com/myaccount/&_wpnonce=只是为了好玩我试着加上wp_create_nonce(\'logout\') 到最