应用最小权限原则来提高 WordPress 安全性

已发表: 2021-07-27

当数据泄露、数据丢失和 DoS 攻击发生时,WordPress 的最小权限原则错过了头条新闻。 然而,它是 WordPress 网站最有效但被忽视的安全最佳实践之一。

在这篇博文中,我们首先定义了最小权限原则,然后检查它适用于何时何地,不采用它的风险,以及为什么许多网站开发人员仍未将其构建到他们的 WordPress 网站中。 我们还分享了一些实用的建议,以便您可以立即开始提高 WordPress 网站的安全性。 这篇博文包括一些小型案例研究,以帮助说明其在实际环境中的使用。

目录

  • 什么是最小特权原则?
  • 最小特权原则何时何地适用?
  • 如果不应用 PoLP 会有什么风险?
  • 为什么许多网站所有者忽略了 WordPress 中的最小权限原则?
  • 如何为 WordPress 应用 PoLP
    • WordPress 数据库用户权限
    • WordPress 用户角色和权限
      • 创建自定义角色
    • 文件和目录权限
    • WordPress插件配置
    • 第三方承包商的 FTP 访问
  • 小型案例研究
    • 电子商务网站应用
    • 大学和教育机构
    • 新闻网站和博客
    • 银行网站
    • 健康和健身追踪器
  • 对 WordPress 及其他应用使用最小权限原则

什么是最小特权原则?

这个想法很简单:不要授予用户帐户、进程或程序超过其完成指定任务所需的访问权限。 就带有博客的典型 WordPress 网站而言,想想你的编辑、作者、贡献者和订阅者。 他们每个人都需要访问或多或少的网站后端。

最小特权原则 (PoLP) 也称为“最小权限原则”、“最小特权原则”或“最小特权用户帐户”(LUA)。

让我们考虑一些简单的例子。 您的孩子通常不需要进入厨房。 因此,您在家中的各个位置都安装了访问控制设备,例如安全门,以使他们能够随意走动——某些房间除外。 在共享的公共联合办公空间中,您会在离开吃午饭前注销您的笔记本电脑。 而且,您高档餐厅的停车服务员会在将钥匙交还给您的汽车之前要求您出示身份证件或车票。 访问控制可防止对您和您用户的宝贵财产造成损害——无论是实物还是数字抵押品。

最小特权原则何时何地适用?

简单的答案是它适用于任何地方:从想要爬楼梯的蹒跚学步的孩子到您的 WordPress 网站托管帐户上的用户。 需要下载月度发票的财务自由职业者不需要与网站管理员相同级别的访问权限。 各种特权公司帐户、文件管理系统、营销策略文档或密码管理器也是如此。

如果不应用 PoLP 会有什么风险?

控制对某些区域的访问似乎不费吹灰之力。 否则,您是不是完全按照任何登录用户的心血来潮离开网站——包括那些可能犯无辜和无意错误的人,甚至可能不知道他们犯了错误,也不知道意外结果?

考虑以下可能的用户:

  • 新用户开始时对 WordPress 网站上的错误的业务影响知之甚少
  • 那些几乎没有 WordPress 管理经验的人
  • 不知道随意下载新的 WordPress 版本或插件的影响,或者在不先备份的情况下更新它们
  • 那些安全意识有限的人创建新用户或更改现有用户的权限
  • 那些不知道如何处理报告的错误或其他问题的人
  • 外部博客文章贡献者,例如合作伙伴、自由职业者和客户,可能对 WordPress 有一点了解,他们甚至可以“帮助”下载或更新您网站上的插件——无需询问

这也意味着您的整个 WordPress 后端都面临着一些未经授权的人的风险,例如具有不适当访问级别的人,添加新用户并允许他们访问可能造成故意伤害的网站区域。

如:

  • 更改主题、定制功能或面向公众的网站内容
  • 对电子商务商店的库存、SKU 或产品元数据处理不当
  • 提供未经授权的折扣
  • 访问、更改、下载或删除代码、页面模板、媒体、配置或员工、客户和其他类型的文件
  • 访问公司、客户、健康或财务数据,例如滥用或出售给其他邪恶方
  • 使网站及其产品或服务脱机

无论您是否使用 WordPress,如果在整个组织中没有刻意和一致地采用 WordPress 的最小权限原则,就会出现任何或所有这些问题。

提示:使用 WordPress 的活动日志插件来记录用户在您的 WordPress 网站上所做的所有更改。 它有助于用户问责并简化故障排除。

为什么许多网站所有者忽略了 WordPress 中的最小权限原则?

我们概述的风险似乎很有说服力,对吧? 但是在 WordPress 网站审核之后报告的最常见问题之一是 WordPress 用户在典型环境中的角色仍然配置如下:

  • WordPress 管理员角色分配给每个用户,即使用户只需要输入其他人编写的内容
  • 这同样适用于文件和目录权限,所有这些都配置了限制最少的权限

我们懂了。 在我们职业生涯的某个阶段,我们都有过担任系统和网站管理员的经验。 与早期的用户和权限之间的联络,检查用户需要做什么,管理员通常更喜欢简单地为他们分配管理员角色(最初似乎更快)。

这同样适用于文件和目录权限。 例如,一些 WordPress 插件将缓存文件或其他数据存储在文件系统上(即在 WordPress 目录中)。 在 /wp-content/plugins/ 目录中简单地配置 777 权限更容易,因为所有插件都可以工作,并且每次安装新插件时都无需花费更多时间进行故障排除和调整权限。 但是,在开始时进行一些研究以确定网站应用程序或目录的特定区域——以防止用户访问过多——降低了已经提到的风险。 而且,它还有一个额外的好处,那就是让每个人都可以访问他们完成工作所需的内容——而无需管理员的进一步输入。

网站所有者和管理员提出的问题

便利值得冒安全风险吗? 你知道我们对这个问题的回答是什么。 如果您最大的安全风险是您已经用业余和宽松的访问控制打开了后门,那么安装和维护前期和强大的 Web 应用程序安全插件、密码协议和其他措施(如 2FA)根本没有意义!

如何对 WordPress 应用最小权限原则

既然您专注于使您的网站应用程序尽可能安全,本节将为您提供一个列表,其中列出了最小权限原则可以在何处以及如何应用于 WordPress 网站或博客。

WordPress 数据库用户权限

让我们从最基本的地方开始——WordPress 用户数据库权限或特权。

对于日常的 WordPress 日常操作,例如内容的编写和发布,WordPress 数据库用户只需要以下权限即可管理数据库内的数据:

  • 选择
  • 插入
  • 更新
  • 删除

这些权限不允许 WordPress 数据库用户修改数据库结构。

建议

在理想的环境中,为了加强 WordPress 网站或博客的安全性,您应该配置安全和限制性的 WordPress MySQL 数据库权限。 仅恢复为需要安装新插件以在数据库中创建新表的用户分配所有权限,或者当 WordPress 已更新并且 WordPress 数据库架构发生更改时。

另一项建议是避免为相关网站授予对 WordPress 以外的数据库的访问权限。

有关 WordPress 数据库权限的更多信息,您还可以阅读为什么最低 MySQL 用户 WordPress 数据库权限可以提高安全性,其中解释了不安全配置的影响。

WordPress 用户角色和权限

WordPress 用户会犯错误——甚至是管理员。 而且,用户还喜欢探索设置和配置。 如果您为用户分配超级管理员或管理员访问权限,他们中比较好奇的人很可能会安装随机插件。 这可能会导致用户体验的意外变化,例如网站功能的变化。

WordPress 有许多内置的用户角色和连接的功能,如下所列(从多到少)。

  • 超级管理员 – 站点网络管理员
  • 管理员 – 单个站点的站点网络管理员
  • 编辑器——管理和发布帖子,包括其他用户的帖子
  • 作者 - 管理和发布自己的帖子
  • 贡献者 - 编写和管理自己的帖子,但不发布它们
  • 订阅者 - 仅管理个人资料

这在实践中如何运作的一个例子是,虽然贡献者和作者可能共享一些功能(例如编辑帖子和删除帖子),但贡献者无法做作者可以做的所有事情,例如上传文件或创建可用块。

创建自定义角色

还有很多插件可用于创建新的和自定义的 WordPress 角色。

以下是一些常见的用例:

  • 在较大的组织中,您可能需要在营销团队中指派某人来审核、批准和回复评论。 “适度评论”功能位于编辑角色中,但该角色还分配了许多其他强大的功能。 因此,如果这就是他们需要做的所有事情,那么使用这个单一权限设置一个自定义角色就足够了。
  • 如果您的 WordPress 网站包含诸如 WooCommerce 之类的电子商务插件,您将被限制为两个初始角色:商店经理(允许用户管理整个商店)和客户(允许用户查看他们的帐户和订单)。 管理员拥有额外的权限,例如“管理设置”和“查看报告”。 但是,如果您的用户(例如非管理人员)需要介于两者之间的功能,例如添加和管理库存数量或 SKU 的能力,或者只是处理订单,该怎么办?
  • 在我们的网站上,我们为知识库文章使用插件。 这使我们的支持团队可以访问创建和修改知识库文章,但无法访问主要网站页面和博客文章。

建议

对于大多数普通用户来说,贡献者角色就足够了。 对于团队领导和实践型经理,建议担任编辑角色。 但是,您应该将超级管理员和管理员角色限制为真正需要他们的有经验、负责任的用户。

有关更多信息,请参阅如何使用 WordPress 用户角色来提高 WordPress 安全性。

文件和目录权限

配置文件和目录权限很容易,网上有大量文档解释如何强化 WordPress 安装的权限。 WordPress 可以在任何运行 PHP 的操作系统上运行,通常是 Linux。 在组方面,Linux 有三个权限组:

  • Owner – 文件/目录的所有者,其权限既不适用也不影响任何其他用户
  • 组 – 已被分配访问文件/目录的用户组,其权限既不适用也不影响组外的任何用户
  • 其他——其他人对同一文件/目录的权限级别

其中每一个都分配有读取(查看内容)、写入(写入或修改内容)或执行(运行内容,例如脚本)权限。 这些权限存储为一系列数字,它们允许访问 PHP 代码、图像和其他媒体、HTML 和 javascript 文件以及插件。

将错误的权限分配给错误的权限组可能意味着恶意黑客可以利用并导致低级别的漏洞演变成不可接受的风险。

建议

安装 WordPress 时,您还应该使用 PoLP,配置尽可能少的文件和目录权限以使 WordPress 正常工作。

请记住,通过强化文件和目录权限,您可能还会限制某些 WordPress 插件的运行。 如前所述,您可能正在安装需要将数据存储在其安装目录中的插件。 如果是这样,不要简单地为插件目录配置 777 权限(对任何有权控制它的人都具有完全的读取、写入和执行权限)。 这是最简单的出路。 但您也应该避免限制它,以免相关用户从 Web UI 更新 WordPress、其主题和插件。

有关详细信息,请参阅 WordPress 文件权限:配置安全网站和 Web 服务器权限的指南。

WordPress插件配置

并非所有管理员都是平等的。 像许多系统和网络一样,在一组 WordPress 管理员中拥有一名首席管理员是很常见的。 通常,网站所有者别无选择,只能分配其他用户的管理员访问权限。 请记住,对于 WordPress 安全插件,它们通常可以存储管理员可以访问的敏感数据,例如 WordPress 安全审计日志。

建议

WordPress 安全插件通常允许您限制对其他 WordPress 管理员的访问。 利用这些功能似乎是一个很小但有时被忽视的控制,它将帮助您更好地控制用户访问。

有关单个插件的更多信息,请联系插件支持和托管服务提供商。 然后询问插件需要写入哪些目录,以便您可以专门为该目录配置权限。

第三方承包商的 FTP 访问

当您聘请设计师或插件支持团队需要 FTP 访问您的网站时,您可能会授予他们对您网站根目录的完全访问权限,对吗? 这是不必要的。

建议

对于设计师来说,他们只需要访问主题的目录,因此限制对该目录的访问。 这同样适用于插件支持团队。 如果他们需要访问以检查日志文件,请让他们通过 FTP 访问插件目录或插件存储日志文件的位置。 避免依赖外部各方为您进行安全尽职调查。

小型案例研究

让我们看一些相关示例,说明这在实践中是如何工作的,以及访问控制问题和决策如何推动 PoLP 的应用,从而为正确的团队和个人提供正确的访问权限。

电子商务网站应用

电子商务网站应用程序,例如消费者购买冰箱冰柜、真空吸尘器、相机或笔记本电脑等大件商品的应用程序,提供了可以采用 PoLP 的各种示例。

电子商务网站应用程序开发人员的一些访问控制决策是显而易见的:

  • 人力资源部门可能不需要访问客户数据或存储插件的文件目录,但他们需要访问大部分员工记录(尽管根据许多数据保护合规立法通常享有特殊地位的健康数据可能更多地限制在需要知道的基础上)
  • 营销部门不一定需要访问 SKU 表或产品代码。 但是,他们需要访问产品数据库中列出产品名称、规格和描述的表格

有些不太明显:

  • 消费者是否需要一直访问他们的所有数据?
  • PCI-DSS 合规官是否需要访问所有消费者数据?

大学和教育机构

对于 Web 应用程序安全性和 PoLP 最初不太明显的更传统和长期存在的机构呢?

大学和学院门户网站的一些访问控制决策是显而易见的:

  • 薪资部门需要访问网站应用程序中的员工和承包商记录,以跟踪工作日和付款
  • 各种类型的行政部门可能需要访问学生记录、处理身份证、住宿申请、账单或补助金

有些不太明显:

  • 哪些第三方供应商(例如构建刷卡提供商)可能需要间歇性访问某些学生数据表?

新闻网站和博客

网络上到处都是新闻网站、播客和博客。 许多网站所有者依赖于多个管理员、贡献者、编辑、校对者和出版商。 此外,还有订阅者和观众需要考虑。

新闻和博客网站应用程序的一些访问控制决策是显而易见的:

  • 根据职责的业务领域,编辑可能需要访问每个人的页面、文章和博客文章的组合
  • 贡献者只需要访问他们自己的博客文章

有些不太明显:

  • 所有第三方都需要访问 WordPress 数据库中的每个表吗? 这就是自定义控件发挥作用的地方。

银行网站

我们的最后一个例子是我们许多人每天使用的银行网站服务。 除了健康信息,个人财务数据自然是最机密的类型之一。

制作网站应用程序的一些访问控制决策是显而易见的:

  • 任何银行服务用户都不得访问其他用户的账户,除非得到明确(可能是用户控制的)同意
  • 员工用户帐户应有权访问许多服务用户帐户,但仅限于他们在工作中需要执行的那些任务

有些不太明显:

  • 技术支持部门应该有多少访问权限? 如果出现错误,他们是否应该能够查看和修改所有内容?

我们建议您考虑并规划每个场景的业务用例。 与具有独特职位描述的用户组和个人相结合。 先把这些画出来。 只有这样,您才能开始检查 WordPress 网站中可用的访问控制协议。

健康和健身追踪器

健康或健身追踪器设备及其连接的在线仪表板收集、存储和共享有关用户及其健康数据、活动、目标和成就的迷人统计数据。

健康和健身追踪器品牌的一些访问控制决策是显而易见的:

  • 组织内的哪些团队需要访问哪些数据? 有意义的是,如果一个团队负责应用程序的睡眠跟踪部分的设计和开发,他们不一定需要访问锻炼统计表。
  • 大多数用户都希望 PoLP(无论他们是否知道)非常严格,因此他们的健康信息不会与其他所有用户共享。 那么,应该为普通用户角色授予哪些访问权限,以及哪些数据将因此在公共个人资料上共享(仅限姓名、个人资料图片和平均每日步数?)。

有些不太明显:

  • 其他用户需要访问哪些信息以及多少信息才能促进此类工具的常见游戏化功能?
  • 开发人员应该设置所有访问权限,还是应该将部分决策权交给用户?

对 WordPress 及其他应用使用最小权限原则

以上只是一些最常见的场景,其中 WordPress 的最小权限原则经常被忽视,但可以很容易地应用。

为了开始采用 PoLP,首先要考虑您想要对以下项目做什么:

  • 网络服务器
  • 数据库
  • 定制

不要仅仅因为事情没有马上解决就回避应用最小特权原则。 是的,大多数时候您必须花费几个小时来配置自定义用户角色和故障排除插件。 在您的脑海中重新包装它,作为对 WordPress 网站安全性的长期投资。