我正在更新我的一个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.
}
};
感谢您的帮助。
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.
}
为清楚起见,省略了各种其他变量、条件、净化等。