更新用户元更新为错误的ID

时间:2013-02-28 作者:ifdion

Background Problem

我现在工作的网站使用定制的前端表单进行内容、术语和用户编辑和创建。非管理员访问wp admin被阻止。

它们都使用基本的wp\\U ajax功能。

在用户编辑表单上,函数使用wp_update_user() 并使用update_user_meta().

刚才我发现一个保存的元字段被其他人保存到另一个用户ID(我的,管理员)。

代码没有更改,因为它可以工作,即使在我使用相同的函数更新了被覆盖的用户元之后。

Code

下面是保存元字段的剥离代码。

add_action(\'wp_ajax_edit-author\', \'process_edit_author\');

function process_edit_author() {

global $current_user;
if ( empty($_POST) || !wp_verify_nonce($_POST[$current_user->user_login],\'edit-author\') ) {
    echo \'You targeted the right function, but sorry, your nonce did not verify.\';
    die();
} else {


    $profile_upload = $_FILES[\'profile-picture\'];

    if ($profile_upload[\'name\'][0]) {
        $profile_picture = attach_uploads($profile_upload);
        update_user_meta( $current_user->ID, \'profile-picture\', $profile_picture[0]);
    }

    wp_redirect($return);
    exit;

    die();
}
}
Theattach_uploads() 将上载的文件另存为附件。然后将第一个文件附件ID保存到用户meta。

Analysist

到目前为止,我只能说图片是由其他人的帐户上传的,因为附件的作者不是我。

Need Help

是否有人发现此问题?我应该在哪里以及如何调试此问题?我怎样才能防止这种情况再次发生?

提前谢谢你。

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

这可能是因为您正在使用$current_user->ID, 总是指当前登录的用户,如果未登录,则指“空”对象(ID == 0). 如果要在任何其他用户上更新用户meta,则必须在$_POST 数据也是如此。

结束

相关推荐

将admin-ajax.php添加到前端。好主意还是坏主意?

我喜欢管理ajax。php。但我讨厌必须本地化才能将前端脚本指向它,我希望有一个等效的、易于查找的主题文件。(看到前端请求通过“/wp-admin/”,我也很烦恼。没有实际原因,只是看起来很难看。)所以我只是复制了管理ajax。php中的根目录“/ajax.php”,调整了包含路径并删除了WP\\u ADMIN常量定义。看起来就像gangbusters(我现在可以将所有前端AJAX请求直接发送到/AJAX.php!并且我仍然可以在插件中使用普通的wp\\uAjax挂钩!)。但这安全吗?可能出现什么问题?由