对于基于PHP的登录系统来说,编写主密码是个好主意吗


Is programming a master password a good idea for a PHP based login system?

我的系统中有一个区域,客户可以登录该区域查看有关其帐户的信息。登录系统是安全的(我希望),并使用最新的PHP标准(例如password_hashpassword_verify等)。

出于各种原因,我经常需要登录客户的帐户,但显然我不知道他们的密码(我也不想知道)。对我来说,编程一个主密码允许我使用相同的密码登录任何帐户是否安全?

我想就道德、对安全的影响等发表意见。

编辑

客户端访问和我的访问都是只读的。

我建议不要这样做。

尽管风险看起来很小,但如果用户怎么会发现这个主密码呢?那么你已经损害了你的整个系统。

我想说,在这里你可以采取两种不同的方法。

  1. 如果某个特定帐户出现问题,请将您的哈希密码复制到数据库中的密码上。然后要求他们在您完成故障排除后重置密码
  2. 创建管理功能以任何用户身份登录

模仿真人是个坏主意。你基本上是在用他们的名字做事,他们知道这一点。当他们中的一个人犯了错误或故意伤害你时,他们可以用这个名字来对付你。他们可以合理地指责你这样做,而你确实有权这样做。

没有。

在任何时候,让他们在寻找时从电脑登录到自己的帐户,使用必须手动启动的VNC软件。将会话录制在视频中,必要时可以将其存档。不要让任何人在任何窗口指控你。不要相信任何人。所有的人都很好,直到你被背后捅刀子。不要允许这样。

如果您只想测试某些功能,请创建具有各种凭据的测试帐户,以模拟数据库中独立部分的交互。

我再怎么强调也不为过:你是个程序员。您唯一的责任应该是创建有效的代码。一旦你允许其他人修改内容,你就应该尽可能地将自己与这个过程隔离开来。通过免除您责任的文件,到您无法控制的安全墙,阻止您在未经他人批准的情况下直接对生产数据库采取行动,以便在有人试图将他们的错误归咎于您的情况下进行合法辩护。

理想解决方案

  • 拥有一个每个人都可以访问的临时环境,包括测试功能的开发人员
  • 生产时:
    1. 在没有登录到生产服务器的情况下,您不能修改任何内容。不是通过GUI,不是从数据库,也不是任何东西
    2. 每次您需要在生产中更新某些内容时,请登录(确保系统记录您的会话启动),同时录制您正在做的视频
    3. 在你对生产进行了更改后,请另一个不是开发人员的人,或者不会有利益冲突的人,验证某个版本是否正在生产中(你也不能拥有版本控制的管理员权限)
  • 当某些事情对某人不起作用时,请使用以下解决方案之一:
    1. 让他们启动VNC或类似的软件,让他们观看。让他们登录,你帮他们做他们的事情,然后退出,再次尽可能远离
    2. 为一些孤立的用户准备一个孤立的数据集。这些用户不能知道数据库的其余部分,其余用户也不能知道数据库中的隔离部分。这些隔离的用户应该模仿您拥有的所有其他用户组的凭据。这应该允许您复制、测试场景
    3. 始终有一个活动的日志记录系统,可以记录错误、异常,以及几乎所有不存在巨大安全风险的日志记录。您应该可以随时访问这些日志。它们是你进入Productions的另一个小窗口,你应该受到限制
    4. 在数据库中设置任何敏感内容的历史记录表。有一个健壮的代码,允许您模拟另一个用户,但该模拟用户所做的一切都应该记录在数据库中。在任何情况下都不要使用这个超级用户,除非有书面请求,或者其他可以用来保护你背部的物理或电子文档。该文档应该清楚地说明需要进行哪些更改,并且除了明确要求之外,您永远不应该做任何事情。从来没有

因为根据我的经验,当任何事情出错时,首先受到指责的是程序员,如果程序员不能证明为什么这不是他的错,那么他可能会有严重的问题。大多数时候,当你说你与此事无关时,人们都很通情达理,相信你,但你只是不想倒霉。