问题描述

我已经添加了一些自定义用户选项到我的网站上的配置文件页面,大多数都可以让用户自己修改。这些选项生活在自己的部分。用户具有读取访问权限,并且可以访问后端并更改其配置文件中的某些设置。

还有另一个 per-user 选项,我不希望用户能够直接修改。我有代码创建该选项组和部分检查用户是否可以编辑其他用户的配置文件。如果不能,则该部分和设置未在 WordPress 中注册 (因此不会显示在配置文件页面上) 。只有具有适当权限的人才可以访问编辑个人资料页面,查看并通过后端更改设置。

恶意用户可以提交附加的 POST 数据,否则有效的配置文件更新,并设置未在页面上注册但在数据库中存在的选项。这种保护的确定性/稳定性?有什么已知的问题吗?

最佳解决办法

您应该 (如果有) 提交您正在使用的代码,即使只是一个代码段,因此我们可以根据您的问题评估您的过程。

简单的答案是 YES,它是安全的,只要你,

  • 防止在用户个人资料页面上显示某些用户角色的输入字段

  • 防止未经授权的用户将用户元数据保存到数据库

第一:

如果与用户元数据相关的输入字段隐藏在用户配置文件页面上的特定用户角色,那么”attacker” 将需要猜测 meta_key 是否用于要填充的字段。祝你好运!

第二个:

如果他们能猜测到 meta_key,那么他们需要运行与 update_user_metaadd_user_meta 相关的功能。他们唯一可以做到的就是如果,

  • 他们可以看到输入字段

  • 您没有通过条件语句检查用户功能。

… 然后允许用户保存或编辑那些应该隐藏的用户元字段,而不是在屏幕上添加/呈现给请求。

我们假设,

  • 您不会为用户提供任何其他方式来运行自己选择的任何脚本,您的网站上的其他任何地方

… 首先减轻了发生攻击的风险。

一开始就是把与在 current_user_can 函数中添加或编辑用户元数据有关的功能。

if ( current_user_can('edit_users') ) {

    //show input fields function

    //allow input fields to be updated function
}

这样可以检查当前用户是否可以实际使用 edit_users,否则 by default is only available to Super Administrators and Administrators 除非您另行允许此功能与您选择的其他用户角色相关。

这不是您可能希望做的唯一的检查,但它肯定是包括安全的更重要的一个。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。