将您不希望用户修改的用户设置存储为用户选项是否安全?

时间:2012-10-15 作者:jeremiahs

我在我的网站上的个人资料页面中添加了一些自定义用户选项,大多数都可以由用户自行修改。这些选项位于各自的分区中。用户具有读取权限,可以访问后端并更改其配置文件中的某些设置。

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

恶意用户是否可以提交其他具有其他有效配置文件更新的帖子数据,并设置一个未在页面上注册但数据库中确实存在的选项?这种保护有多可靠?它有任何已知的问题吗?

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

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

然而,简单的答案是YES, 这很安全,只要你,

  • prevent input fields being displayed on user profile page for certain user roles
  • prevent unauthorized users from saving user meta to the database

首先:

如果用户配置文件页面上的特定用户角色隐藏了与用户元数据相关的输入字段,则;攻击者“;需要guess 什么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 除非您另外允许您选择的其他用户角色使用此功能。

这并不是您希望进行的唯一检查,但出于安全考虑,这肯定是更重要的检查之一。

结束

相关推荐

将check_admin_referer与主题选项和options.php一起使用

如果我按照法典建议的方式设置主题选项页面(http://codex.wordpress.org/Creating_Options_Pages)然后我的表单提交到“选项”。php’。settings_fields 创建一个nonce,如果我正在创建自己的提交页面,将使用该nonce进行检查check_admin_referer.那么我的问题是。。。。如果我使用选项。php作为我的“表单处理器”,这是否意味着我不能使用check_admin_referer?谢谢Nick