允许管理员在禁用“注册后编辑邮件”时始终能够编辑邮件

已进行重大澄清并更新了建议标准,以更好地协助社区成员理解此功能改进的益处。

更新 可编辑邮箱 设置,以提供更多选项,指定可以编辑邮箱地址。该设置的设计示例如下:

  • 所有用户
  • 仅用户(普通管理员或版主无法在不使用 Rails 控制台或更改设置的情况下操作)
  • 仅工作人员
  • 仅管理员

如果该设置处于 开启 状态(默认即为开启),则引入 Sudo 模式防护机制,以管理员身份执行操作(而非被编辑账户所属的用户身份);这使得在引入该设置时,能够结合下文提到的关键点,防止未经授权的更改。

理由/为何需要实施

如果您希望将该设置设为 关闭,以便控制邮箱变更(例如要求用户申请变更、出于安全实践或其他原因),但有时又需要编辑邮箱;在此设置 关闭 的情况下,即使是 管理员 也无法编辑邮箱。

这就引入了一个新问题,如果存在以下一种或多种使用场景:

目前编辑用户邮箱的方式有两种:1) 在另一个标签页中将其开启,快速编辑邮箱;或 2) 打开 Rails 控制台并手动更改邮箱。

对于大多数日常运营的管理员而言,这 可能 会带来不必要的技术挑战。 如果您仅仅依赖 Rails 控制台来 处理所有事务,而实际上该设置本就存在。

额外的防护机制为何有助于实现此功能:

  • 如果因技术原因保持开启,受感染的用户邮箱可能被篡改。
  • 管理员可能犯错,或进行未授权的更改。
  • 用户会认为拥有该权限的人员能够防止恶意更改。

该问题上次讨论是在 2015 年。诚然,您可以编辑邮箱,但无法在管理员视图中直接编辑,系统会提示您前往用户偏好设置视图。即便我是管理员,受此设置限制,也无法操作。

1 个赞

是的,我对此强烈反对。虽然你的具体用例对你来说似乎足够直接,但在用户界面中为此实现一个简单的覆盖功能,会引入重大的安全风险,而带来的便利性收益却微乎其微。

这种摩擦本身就是一个安全功能!

因此,必须使用 Rails 控制台或切换全站设置的这种不便,实际上是一项关键的安全功能,因为它充当了“安全刹车”,迫使管理员在执行非常敏感的操作时,必须经过一个刻意且高摩擦的流程。

更改用户的电子邮件地址等同于交出其账户的钥匙,因为新的电子邮件地址可用于触发密码重置,从而有效地将原用户锁定在外,并使新邮箱所有者获得完全控制权。

这种摩擦阻止的一些主要攻击向量:

  • 攻击管理员账户!——这是最重大的风险。如果攻击者通过钓鱼、密码复用等方式获取了管理员账户的访问权限,一个简单的 UI 按钮或切换开关将允许他们静默且轻松地接管任何其他用户(包括其他员工)的账户;而要求通过 Rails 控制台进行 Shell 访问则提供了强大的安全层。

  • 社会工程学攻击!——这为社会工程学攻击敞开了大门。一个心怀不轨的用户可能冒充合法用户,说服管理员为其更改电子邮件地址;同样,当前的高摩擦流程使得管理员更有可能核实或考虑该请求的真实性。

  • 内部威胁——恶意的管理员可能滥用此功能来接管账户。

对于此类不频繁但高风险的管理操作,使用 Rails 控制台是合适的,因为它确保执行操作的人拥有服务器访问权限,而非仅仅是被劫持的会话。此外,该操作是刻意的,需要特定的技术知识(并且会记录在 Shell 历史记录中)。

1 个赞

感谢你的关心,但我认为你可能对整个情况存在误解。你在关于“安全性”的论点中存在一个严重的漏洞。

如果启用该设置(默认即为启用状态),你本来就可以编辑电子邮件。

危及管理员账户!——这是最大的风险。如果攻击者通过钓鱼、密码复用等方式获取了管理员账户的访问权限,那么一个简单的界面按钮或开关就能让他们静默且轻松地接管任何其他用户(包括其他员工)的账户;而要求通过 Rails 控制台进行 Shell 访问则提供了一层强有力的安全保障。

如果管理员账户被攻破,入侵者只需启用今天已存在的该设置,即可实施你提到的那些操作。

更改用户的电子邮件地址等同于将账户的钥匙交给对方,因为新邮箱地址可用于触发密码重置,从而有效将原用户拒之门外,并将账户的完全控制权交给新邮箱的所有者。

对于这类不频繁且高风险的管理操作,使用 Rails 控制台是合适的,因为它能确保执行操作的人拥有服务器访问权限,而非被劫持的会话。此外,该操作是明确且需要特定技术知识的(并且会记录在 Shell 历史中)。

并非总是如此,正如我在开篇帖子中所说:你只需开启并关闭该设置即可启用编辑功能。唯一的问题是,该设置本应处于关闭状态(尽管默认是开启的),一旦开启,就会让非管理员用户也能在编辑操作进行时修改他们的电子邮件地址。

1 个赞

好的,我现在明白你关于切换该设置时的观点了。

我仍然强烈认为使用 Rails 控制台是这里的最佳方案。也许开发一个插件也是可行的。

当设置为 ON

“允许用户在注册后更改其电子邮件地址”

这将启用对 所有 用户(包括管理员)的编辑功能。一个简单的功能请求是:允许将该设置限定为例如“仅限管理员”、“管理员 + 普通用户”或“仅限普通用户”。

如果我只是 “开启它”,则会在启用状态下赋予站点范围内 任何人(或仅限管理员)更改 用户 电子邮件的能力。

通过添加一个设置(该设置已 部分 存在),使其仅适用于 管理员,可以让已有的 简单功能 不再局限于 全有或全无 的情况。

1 个赞

好的,再仔细想想,我觉得采用类似 sudo 的高摩擦度 UI 方法可能是最佳方案,因为该设置在编辑窗口中属于“不安全”操作,且并非所有管理员都能访问 Rails 控制台(例如托管站点的情况)。

或许可以这样设计:当管理员尝试保存新邮箱时,弹出一个模态对话框,强制其重新输入自己的密码以确认操作(如果启用了双因素认证,则进行 2FA 挑战)。不言而喻,此操作必须详细记录在工作人员日志中。我认为仍需某种强制性的用户验证机制,以便合法用户有机会报告账户被接管的情况,同时应向新邮箱地址发送通知以确认变更?:thinking:

我非常反对管理员仅凭用户请求就能直接更改邮箱地址的做法。必须设置某种验证层面的摩擦或复杂性。

1 个赞

没错,这个功能确实需要一些优化和更新。目前,如果你启用它,管理员可以直接编辑任何用户账户的邮箱,没有任何额外的防护机制。我很赞同你提出的双因素认证或密码验证的想法。

1 个赞

不过,还是要感谢你让我思考一下“可编辑邮箱”这个功能。这是一个有趣且略显复杂的讨论话题!:slightly_smiling_face:

1 个赞

我已对原帖进行了编辑,大幅优化了措辞,并补充了关于保护此次变更的额外建议 :wink: 我认为这将使整体内容得到显著提升。

1 个赞