如何在前端提交表格中使用NONCE?

时间:2012-08-27 作者:Jo_pinkish

多亏了这里的各种帖子,我成功地整理了一份前端提交表单。经过大约24小时的调整,我终于让一切都正常了,包括提交后重定向到“成功”页面,但我不知道如何处理nonce。

以下是表单页:http://pastebin.com/YWyXL3jY

以下是成功页面:http://pastebin.com/3Usu0Pt6

它们都是自定义页面模板(我知道目前格式有点乱,因为不同的部分来自不同的来源,我不想使用文件上传功能,因为我宁愿使用插件来提高安全性)。

在将用户重定向到成功页面之前,是否需要处理nonce?我对nonce没有任何经验,我是一个“复制粘贴”php程序员,所以请温柔一点!

非常感谢您提供的建议:)

4 个回复
SO网友:Kamal Ahmed

在前端代码的标记之前使用以下代码。

wp_nonce_field(\'name_of_your_action\', \'name_of_your_nonce_field\');
上面的代码将在表单标记内生成两个隐藏的输入。现在,您可以在处理表单的后端验证nonce。使用以下代码验证刚才创建的nonce。

  if(wp_verify_nonce($_REQUEST[\'name_of_your_nonce_field\'], \'name_of_your_action\')){

            // Nonce is matched and valid. do whatever you want now.

     } else {

           // Invalid nonce. you can throw an error here.
}
注意:仔细查看“如何”name_of_your_action“是first argument 共\'wp_nonce_field()\' 功能和它是the second argument 共\'wp_verify_nonce()\' 功能:)因此,不要将其用作两个函数中的第一个参数。很多人都犯了这个错误,所以我想提一下。

SO网友:AsyncMoksha

要向窗体添加nonce,可以使用以下函数:

wp_nonce_field($action, $name, $referer, $echo)

  • $action=(可选)这是一个表示操作名称的字符串(可选)这是一个表示nonce名称的字符串。如果将此字段留空,WordPress将默认为“\\u wpnce”
示例:

前端:

<form action="" method="post">
<?php wp_nonce_field(\'my_delete_action\'); ?>
<input type="hidden" name="id" value=" <?php echo $id; ?> " />
<input type="text" name="rec_name" value=" <?php echo $name; ?> " />
<input type="submit" value="Delete" />
</form>
后端:

$retrieved_nonce = $_REQUEST[\'_wpnonce\'];
if (!wp_verify_nonce($retrieved_nonce, \'delete_my_action\' ) ) die( \'Failed security check\' );
资料来源:https://www.tipsandtricks-hq.com/introduction-to-wordpress-nonces-5357

SO网友:Vikas Bhardwaj

使用此选项进行命名和验证。

wp_nonce_field(\'test_action\', \'submit_post\');
这将生成名词字段,您可以使用下面的代码进行验证。

 if(wp_verify_nonce($_REQUEST[\'test_action\'], \'submit_post\')){
           /// do your work
  }else{
         /// throw an error
  }

SO网友:drzaus

从本页开始:http://codex.wordpress.org/WordPress_Nonces

然后看看usage for wp_verify_nonce 以及example usage of wp_nonce_field, 您必须检查验证结果,并决定要做什么(通常是死亡,但在您的情况下可能是echo 故障消息)。您可以在第8行使用验证作为“检查表单是否已提交”:

if ( empty($_POST) || wp_verify_nonce($_POST[\'name_of_nonce_field\'],\'name_of_my_action\') === false ) {
    /* failure */
} else {
    /* success, processing, redirect */
}
假设响应成功,那么您将执行下一个操作,例如显示确认消息,或者在您的情况下重定向页面。只需确保在打印任何输出之前重定向即可。

还有一些需要考虑的问题--http://kovshenin.com/2012/nonces-on-the-front-end-is-a-bad-idea/ -- 虽然在这种情况下,因为你正在创建内容,我相信这家伙提到了暂时的“正确”。

结束

相关推荐

如何将插件的php文件包含到另一个插件函数文件中

我需要使用插件B的一个函数来定制插件A的短代码输出。因此,我通过插入一个条件来检查插件B的函数值来更改插件A的短代码函数,但我需要包含支持此函数的php文件。我尝试了所有require\\u,require和include,但出现以下错误:使用时require_once(\'../../pluginname/pluginfunctions.php\');错误警告:require\\u once():open\\u basedir限制生效。文件(../../magicmembers/core/libs/fu