在meta_box存储中进行安全检查不情愿吗?

时间:2013-06-29 作者:Yoga

例如,在this tutorial, 保存元框数据时建议的代码为

/* Verify the nonce before proceeding. */
if ( !isset( $_POST[\'smashing_post_class_nonce\'] ) || !wp_verify_nonce( $_POST[\'smashing_post_class_nonce\'], basename( __FILE__ ) ) )
    return $post_id;

/* Get the post type object. */
$post_type = get_post_type_object( $post->post_type );

/* Check if the current user has permission to edit the post. */
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
    return $post_id;
检查nonceuser role 似乎不情愿,似乎他们陷入了save_post, 这几乎是函数中的最后一行wp_insert_post, WordPress应该已经执行了所需的检查,对吗?

这样我就可以安全地移除它们了?

1 个回复
SO网友:onetrickpony

不,不是真的。您假设调用wp_insert_post() 已经执行了这些检查。但是wp_insert_post() 也可用于其他页面,而不仅仅是编辑页面、插件甚至主题(其中许多页面存在安全漏洞)。

这就是为什么您应该通过使用nonce来确保代码只在您想要的地方运行。

好的,我正在编辑答案,因为评论回复太长了。

如果插件公开wp\\u insert\\u post,不仅我的新自定义字段会被黑客攻击,而且所有的post字段都会被黑客攻击。(同样,这是插件中的错误)因此,我真的看不到验证我自己的自定义字段是否可以带来任何额外的安全性

但它会在你的代码的帮助下被“黑客”攻击。考虑一下主仪表板上的快速张贴表单。它没有为你的帖子元输入字段,是吗?提交时,wp_insert_post -> save_post 被调用,如果$_POST 包含您的元字段(很容易编辑源代码并添加一些),它们将通过元框代码保存。本质上,如果不进行nonce检查,就可以更改WordPress中涉及后期编辑的任何形式的元字段,而不仅仅是附加自定义输入字段的形式。这就是你想要的吗?

我没有创建新操作,因此如果核心wordpress的代码允许在不验证nonce的情况下调用wp\\u insert\\u post,这就是wp中的一个bug。(如您所见,他们都在post.php中调用了check\\u admin\\u referer。

目的wp_insert_post 是插入帖子,而不是检查数据的来源。然而,我同意save_post 行动安排不当。此类函数不应触发操作和过滤器。相反,该操作应该由每个表单提交处理程序激发。除了此操作在WP API中引入更多的不一致性之外,它还促进了漏洞利用。。。

结束

相关推荐

保存多个Metabox内容

我正在为一位朋友的WordPress网站上创建一个相当简单的自定义页面,但我在正确保存元数据库的内容时遇到了一些实际困难。WordPress的行为似乎不像我所期望的PHP那样,因此,当我将echo语句放在某个地方以查看它的位置时,它们并不总是出现,即使代码必须运行时也是如此。非常奇怪。有人能指出我做错了什么吗?(很抱歉代码太多!)function metabox_exhibition_setup() { /* Add \'start_date\' hook. */ add_