【问题标题】:Is there a security benefit to using a userid/password for mysqli_connect() on a MariaDB/PHP server?在 MariaDB/PHP 服务器上使用 mysqli_connect() 的用户 ID/密码是否有安全优势?
【发布时间】:2020-11-22 01:01:35
【问题描述】:

我很难想出要求 MariaDB/PHP 网络应用程序密码的好处,因为密码将始终以明文形式存储在某处

无论它是在 mysqli_connect() 调用中硬编码,还是从 ENV 文件或环境变量或其他位置提供给 mysqli_connect(),拥有密码似乎没有任何安全优势,因为如果网络服务器可以读取它,那么任何可以在网络树中植入代码的人都可以。

似乎最好将帐户设置为允许从 localhost 进行无密码登录,然后将 MariaDB 帐户限制为服务器的 IP 地址。

有没有人想出更安全的方法?

有什么想法吗?

【问题讨论】:

  • 你本地主机上的其他应用程序现在可以在没有密码的情况下与你的数据库交互吗?如果将密码存储在 ENV 或具有正确配置权限的文件中,那会不会更困难?
  • 我不明白这个逻辑。完全没有。如何“设置帐户以允许无密码登录”任何都比拥有密码更好。看起来只是抽象的沉思。如果您喜欢,“好处”在于使用标准的通用机制,而无需设计花哨的方案。
  • 无密码可能意味着 unix socket auth 插件要求 unix 用户匹配 mysql/mariadb,它将身份验证替换为 unix 用户的身份验证,而不是已知 IP 上的已知字符串。所以不是抽象的,非常具体的和发明的,在所有情况下都没有必要更好或更坏,而是不同。确实需要考虑场景的风险/收益,但没有解决方案特别健壮和容错。
  • @lne : 这是一个没有人类用户和无关应用程序的专用主机。
  • @YourCommonSense:唯一“更好”的部分是不必存储、调用或维护密码。 “没有密码”不是“花哨的计划”,实际上恰恰相反。不存在的数据不需要维护。

标签: php mysql mysqli mariadb


【解决方案1】:

如果有人可以访问您网络服务器上的文件,那么除了 MySQL 密码泄露之外,您还有更重要的问题需要担心。

不应在您的应用程序中硬编码数据库密码。使用版本控制软件时,您不能对硬编码密码保密。如果您的开发和生产软件是硬编码的,那么您就不能拥有单独的凭据。 数据库凭据应存储在环境变量中。

应始终使用密码保护直接数据库访问,以避免未授权方意外访问。想象一下,如果有人在您的生产服务器上设置了端口转发或安装了 phpMyAdmin 并且具有不受限制的访问权限,会发生什么情况。通过使用权限系统,您可以限制谁可以访问您的数据库。

当运行多个可以访问不同逻辑数据库的应用程序时,您可以限制哪个应用程序可以访问哪个数据库。这样,如果一个应用程序被黑客入侵或出现严重故障,您可以最大限度地减少损失。如果多个租户使用同一台服务器,您可以通过向每个租户提供单独的凭据来保证其数据的隐私。

密码以明文形式存储这一事实并不重要。这些凭据只能在该一台服务器上存储和使用。如果有人可以访问该密码,则意味着他们已经可以访问您的服务器。目前,安全散列不会保护任何东西。这些密码通常是很长的唯一字符串,不会在其他任何地方重复使用。

【讨论】:

  • 由于他们可以访问服务器,因此他们也可以访问 Web 应用程序使用的数据库登录名/密码。这似乎并不比没有密码更安全。
猜你喜欢
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2011-05-28
  • 2017-10-04
  • 2021-11-23
相关资源
最近更新 更多