PHP,MySQL应用程序用户和凭据应该在应用程序或数据库上运行吗?



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

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

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

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

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

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

使用 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 访问权限,以便能够弄清楚您如何加密密码。


最重要的是,永远不要让用户访问您的数据库。事实上,我建议您的主数据库用户角色仅具有与数据交互所需的权限(可能是SELECTINSERTUPDATE(,并使用具有CREATE权限的单独用户来创建用户。

最新更新