2017-08-24 100 views
1

我的一个客户正在使用Woocommerce运行wordpress网站。最近我被要求以其用户之一的身份登录,以便复制问题。WordPress的:为什么订户可以看到管理面板?

我发现的是,我可以键入/ wp-admin,它只是把我带到完整的管理面板,我拥有与管理员相同的菜单项。这显然是非常严重的,因为如果任何用户知道这一点,他们可以把网站放下,如果他们想要的话。

在试图阻止他们,我把下面的脚本在functions.php文件:

// Redirect non-admins away from wp-admin 
add_action('init', 'blockusers_init'); 

function blockusers_init() { 
    $current_user = wp_get_current_user(); 

    if (is_admin() && ! current_user_can('administrator') && ! (defined('DOING_AJAX') && DOING_AJAX)) { 
     wp_redirect(home_url()); 
     exit; 
    } 
} 

为具有“用户”的角色,current_user_can(“管理员”用户登录后)返回false如果我在网站的前端,并且返回如果我转到/ wp-admin,则返回true

由于当前用户只是一个订阅者,我认为它应该在任何地方都返回false。

我有点卡住了......我不知道接下来应该看什么。 (我尝试了像禁用所有插件一样的东西,但问题仍然存在)。你们有什么想法我应该接下来尝试吗?

+0

您是否点击了管理面板并确认它实际上是管理面板而不是个人用户设置管理面板? –

+0

您是否在常规设置中选中了“新用户默认角色”选项? – JazZ

回答

0

上述问题的原因是网站中的黑客入侵。我在根文件夹中发现了一些不应该在那里的文件。临时修复是删除wp-admin和wp-includes,并从新安装中复制文件夹。现在用户不能再查看管理面板,并且它会像它应该重定向到前端。现在我必须扫描插件文件夹,看看我是否找到其他东西。

0

您的支票不正确。你在做!wp_admin()。当您在管理控制台中使用而不是时,情况确实如此,这与您想要的完全相反。

add_action('init', 'blockusers_init'); 

function blockusers_init() 
{ 
    if (is_admin() && !current_user_can('administrator') && !(defined('DOING_AJAX') && DOING_AJAX)) 
    { 
     wp_redirect(home_url()); 
     exit; 
    } 
} 

注意,它可以是current_user_can('subscriber')只定位用户,或!current_user_can('administrator')瞄准所有非管理员,这意味着编辑,撰稿人等

整个情况是怪异,但。通常情况下,用户可以访问管理面板,但他们只能看到仪表板及其配置文件。如果他们实际上可以看到整个管理面板,则应该调查原因,因为它不正常。
P.S.你确定他们没有给你管理员帐户,而不是订阅调查?

+0

嗨,是的,你是绝对正确的。 '! '在那里是错误的。我实际上并没有在我的代码中使用它。我确定用户是订户,我创建了另一个用户,所以我可以测试,结果是一样的:所有用户都可以访问所有的管理菜单项。 是的,整个情况很奇怪。任何有关可能导致这种奇怪行为的建议? – user3015234

+0

@ user3015234没有明确的建议,因为我不知道他们使用什么样的插件和主题。但我想一个好的开始将是逐个禁用插件,看看它是否改变了什么,然后改变主题。如果它有帮助,你至少知道在哪里看得更远。另外,请检查设置中的默认新角色是否是订阅者,而不是其他内容。 –

相关问题