NOnce提交表单失败

时间:2021-01-06 作者:Chris J. Zähller

我正在更新我的一个WordPress插件中的一些代码,通过添加nonce来提高安全性。该插件具有一个表单,该表单生成一些输出,用户可以将其复制并粘贴为短代码。在设置表单的底部,我有第二个表单,它将第一个表单重置为其默认值。

正如标题所说,现在的局面一直在失败。

<?php
/**
 * Form reset.
 *
 * @package Foobar/foobar
 */

// $parent and $token construct the page slug. Settings form and these variables omitted for clarity.

$html  = \'<form id="my-reset" name="my-reset" method="post" action="options-general.php?page=\' . $this->parent->token . \'&tab=generator">\';
$html .= wp_nonce_field( \'options-general.php?page=\' . $this->parent->token . \'&tab=generator\', \'my_reset_nonce\' );
$html .= \'
  <p class="submit"><input name="reset" class="button button-secondary" type="submit" value="\' . esc_html__( \'Reset the Shortcode Generator\', \'textdomain\' ) . \'" >
        <input type="hidden" name="action" value="reset" />
    </p>
</form>\';

if ( isset( $_POST[\'reset\'] ) ) {
    if ( ! wp_verify_nonce( \'options-general.php?page=\' . $this->parent->token . \'&tab=generator\', \'my_reset_nonce\' ) ) {
        die( esc_html__( \'Invalid nonce. Form submission blocked!\', \'textdomain\' ) );
    } else {
        // Logic to reset the settings form.
    }
};
感谢您的帮助。

1 个回复
SO网友:Chris J. Zähller

好吧,我不确定我的原始代码出了什么问题,但是this post 让我走上正确的道路。

要生成nonce,请使用:

wp_nonce_field( plugin_basename( __FILE__ ), \'my_reset_nonce\',true,false);
要验证,请使用:

if ( ! isset( $_POST[\'my_reset_nonce\'] ) || ! wp_verify_nonce( ( $_POST[\'my_reset_nonce\'] ), plugin_basename( __FILE__ ) ) ) {
    die;
} else {
    // Reset the form.
}
为清楚起见,省略了各种其他变量、条件、净化等。

相关推荐

Debug Errors, site health

当我去现场健康,这是我看到的。Debug mode is often enabled to gather more details about an error or site failure, but may contain sensitive information which should not be available on a publicly available website. The value, WP_DEBUG_LOG, has been added to this