【问题标题】:PHP, MySQL application user and credentials should run on application or db? [duplicate]PHP、MySQL 应用程序用户和凭据应该在应用程序或数据库上运行? [复制]
【发布时间】:2018-09-03 23:11:00
【问题描述】:

我们正在创建 PHP/MySQL Web 应用程序。

一方面:
我的 PHP 开发人员相信创建一个包含用户/密码/权限的表来授予或拒绝访问最终应用程序的某些部分。

另一方面,我的数据库专家希望直接使用数据库来创建用户/密码/权限。

对于 DB 选项,我认为我们需要在 MySQL 前面创建一个单独的 Web 服务,这样才能工作?还是让用户直接访问数据库?

最好的方法是什么? Dupral 或 Joomla 等稳定的 php/mysql 应用程序如何运作?

是的,这是一个关于设计最佳实践的问题,但我需要找出 PHP/MySQL 开发的最佳实践。 MySQL 应该管理 Web 用户,还是只管理一个 DB 用户,其余的在应用程序级别。

【问题讨论】:

  • 和开发者一起去这个
  • 在您写下重复的主题与 mysql 和 php 无关之前:您的问题(以及重复的问题)是关于一般 Web 应用程序设计原则的,这些原则与底层技术无关。 mysql 的密码哈希函数与 php 的功能相比有多好并不重要。

标签: php mysql security


【解决方案1】:

走 PHP 路线


无论您是通过 PHP 还是直接通过 MySQL 创建登录,它们最终仍会保存在您的 MySQL 数据库中。但是,这两种方法之间存在一些差异。要点是,如果您采用 PHP 路线,您的用户将能够自己创建登录名(这意味着他们自己挑选密码)。如果你走数据库路线,你的用户将不得不分配给他们的密码。


在 MySQL 中,可以使用 SHA() 之类的东西来安全地散列密码(使用盐),但据我所知,您无法在 MySQL 中选择更安全的加密算法。 SHA-256 / SHA-512 几乎肯定可以满足您的需求,尽管您可能想要更安全的东西。

使用 PHP,您可以访问 password_hash()password_verify() 等方法,这些方法可以与 PASSWORD_BCRYPTPASSWORD_ARGON2I 等算法一起使用(这比标准 SHA-256 或 SHA 安全得多-512)。


最后,您必须考虑如果发生数据库泄露(每天大约有 30,000 个)应该发生什么。如前所述,无论哪种情况,加密密码都存储在数据库中。如果您通过 MySQL 创建登录,您可能还会暴露加密的方法(可能连同使用的任何盐一起)。如果您通过 PHP 构建登录,攻击者将需要对您的网站进行完整的 shell 访问,以便能够弄清楚您是如何加密您的密码的。


最重要的是,从不让用户访问您的数据库。事实上,我建议确保您的主数据库用户角色只有required privileges 与数据交互(可能是SELECTINSERTUPDATE)并使用具有CREATE 权限的单独用户进行创建的用户。

【讨论】:

  • 我同意您的结论,但您确实需要更新答案中关于 mysql 密码哈希功能的部分。更不用说验证 mysql 用户的替代方法了。
猜你喜欢
  • 2010-09-25
  • 2014-08-15
  • 2016-10-08
  • 2013-03-07
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2020-07-11
  • 2011-03-09
相关资源
最近更新 更多