我们正在创建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_BCRYPT
或PASSWORD_ARGON2I
等算法一起使用(比标准SHA-256或SHA-512更安全(。
最后,您必须考虑在发生数据库泄露时会发生什么(每天大约有 30,000 次(。如前所述,无论哪种情况,加密的密码都存储在数据库中。如果您通过MySQL创建登录名,则可能还会公开加密方法(可能以及使用的任何盐(。如果您通过 PHP 构建登录名,攻击者将需要对您的网站进行完全 shell 访问权限,以便能够弄清楚您如何加密密码。
最重要的是,永远不要让用户访问您的数据库。事实上,我建议您的主数据库用户角色仅具有与数据交互所需的权限(可能是SELECT
、INSERT
、UPDATE
(,并使用具有CREATE
权限的单独用户来创建用户。