在我的插件中使用WP随机数时出现混乱

时间:2013-09-22 作者:Konsole

我创建了一个小插件,用户可以通过单击Add New 从元框链接并删除它们。用户可以使用Set featured image 链接以从媒体库中选择特色图像。这个Add New 链接克隆(使用javascript)以前的元框(使用适当的过滤器)以创建新的元框,而“删除”按钮将删除元框。

Metabox snapshot

Problem and Questions

<对于生成的每个元框,我当前只使用单个nonce字段。许多以前的线程建议应该为每个元框添加新的nonce字段。如果使用javascript克隆框,如何创建不同的nonce字段?我应该使用AJAX吗?或者,在这种情况下,是否有必要使用nonce字段,因为用户只能从媒体库中选择图像?

元框中的隐藏输入字段用作数组(请参见元框的html),并使用update_post_meta. 如果为每个动态添加的元框添加了nonce字段,那么在保存帖子时如何检查它?

if ( !wp_verify_nonce( noncefields..., plugin_basename(__FILE__) ) ) { return; }

元框的html如下所示。

<?php wp_nonce_field( plugin_basename(__FILE__), \'dfi_fimageplug\'); //this is generated only once for all meta box ?>
<a href="javascript:void(0)" class=\'dfiFeaturedImage\'><?php _e(\'Set featured image\', \'ap_dfi_dynamic-featured-image\') ?></a><br/>      
<img src="<?php if( !empty($featuredImgTrimmed) ) echo site_url() . $featuredImgTrimmed ?>" class=\'dfiImg <?php if( is_null($featuredImgTrimmed) ) echo \'dfiImgEmpty\' ?>\'/>
<div class=\'dfiLinks\'>   
 <a href="javascript:void(0)" data-id=\'<?php echo $featuredId ?>\' class=\'dfiAddNew\'><?php _e(\'Add New\', \'ap_dfi_dynamic-featured-image\') ?></a>
 <a href="javascript:void(0)" class=\'dfiRemove\'><?php _e(\'Remove\', \'ap_dfi_dynamic-featured-image\') ?></a>
</div>
<div class=\'dfiClearFloat\'></div>
<input type=\'hidden\' name="dfiFeatured[]" value="<?php echo $featuredImg ?>" />
我在插件开发方面不是很有经验,在这件事上我真的很困惑。请提出建议。

1 个回复
最合适的回答,由SO网友:Twifty 整理而成

nonce是一次性使用寿命有限的唯一数字。您可以克隆它们,但您将看到的问题是,一旦发送回服务器并进行验证,其他克隆将变得无效。

你有几种方法来处理这个问题。

在服务器上生成所有框并丢弃Javascript无论哪种方式,您的临时邮件都需要来自服务器。WP处理此问题的方法(例如,对于其类别元盒)是从taxonomy 名称您可以为此使用post值或图像名称。

<?php wp_nonce_field(\'add-\' . $name, \'add-\' . $name . \'_nonce\', false); ?>
执行此操作还需要存储$name 在页面上的隐藏字段中。

<input id="<?php echo $name; ?>" type="hidden" value="add-<?php echo $name; ?>" />
在Ajax中,将唯一名称和nonce都发送回服务器,验证并返回您想要的任何内容。

至于你的另一个问题“现在有必要吗?”。那要看情况了。我建议,任何时候您都可以从表单数据更改数据库,那么是的,它们是必需的。如果您只是在检索数据,那么不,它们不是。但它们在使可能已被书签或缓存在某处的请求无效时仍然有用。我记不清了,我想他们的寿命大约是12个小时。

结束

相关推荐

security issue in wordpress?

我已在中安装wordpresswww.mysite.com/user 现在假设有人熟悉wordpress,他/她可以通过www.mysite.com/user/memberswww.mysite.com/user/groups 甚至他都能看到www.mysite.com/user 没有登录到我的网站。有什么方法可以防止这种情况发生吗。类似于如果他没有登录或任何类型的重定向到特定url,访问就会被拒绝。或者你没有权限访问/members/ 在此服务器上。因此,我面临着很多问题。我使用frisco作为budd