【问题标题】:wp_nonce_field not being validatedwp_nonce_field 未被验证
【发布时间】:2018-06-09 19:15:32
【问题描述】:

我的 WordPress 站点 (4.9.1) 中有一个表单,其中包含一个 nonce 字段(使用 wp_nonce_field())并发布到 admin-post.php。

我以一种非常简单的方式使用它...:

<?php wp_nonce_field( $action, 'referer' ); ?>

...生成类似这样的内容:

<input type="hidden" id="referer" name="referer" value="d6dd8e58dd" />
<input type="hidden" name="_wp_http_referer" value="/slug/?laorder=99371&amp;laid=92bbfca59e41a4938ce8c0751cfcd0c4a68e75c14bd94b981505cc037079280&amp;lauser=myemail%domain.com" />

问题在于验证:

if (! isset( $_POST['referer'] ) || ! wp_verify_nonce( $_POST['referer'], $action ) ) 

在某些(未知)情况下会失败:在隐身模式下发布时似乎总是可以正常工作,并且对于使用不同浏览器(chrome、firefox 或 safari)的某些用户来说随机失败。

所有用户都是客人。

有人知道为什么会发生这种随机行为吗?

【问题讨论】:

    标签: php wordpress nonce


    【解决方案1】:

    正如你所说,所有用户都是客人,他们都没有登录,但你不应该对未登录的用户使用 nonce。您不应在任何完整或部分页面缓存方案中使用 nonce。与很多次给人的印象不同,只是在没有特定原因的情况下到处撒随机数并不能提高网站的安全性,而且可能会给未登录的用户带来实际问题。

    因为 WordPress 将验证您的身份验证 cookie 信息,如果您被允许删除该帖子,则会继续删除它。攻击者可以对此做的就是让您的浏览器在您不知情的情况下访问该 URL。例如,通过在第 3 方页面上制作链接。例如:

    <img src="http://example.com/wp-admin/post.php?post=123&action=trash" />
    

    在里面。这会触发您的浏览器向 WordPress 发出请求,浏览器会自动附加您的身份验证 cookie,而 WordPress 会认为这是一个有效的请求。

    source

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 2019-03-22
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2021-03-25
      • 1970-01-01
      相关资源
      最近更新 更多