我们正在创建PHP/MySQL web应用程序。
一方面:
我的PHP开发人员相信,创建一个具有用户/密码/权限的表,可以授予或拒绝对最终应用程序某些部分的访问。
在等式的另一边,我的DB专家希望直接使用数据库来创建用户/密码/权限。
对于DB选项,我认为我们需要在MySQL前面创建一个单独的web服务,这样才能工作吗?还是让用户直接访问数据库?
怎样才是最好的方法呢?像Dupral或Joomla这样的/mysql应用程序是如何工作的呢?
是的,这是一个关于设计最佳实践的问题,但我需要找到PHP/MySQL开发的最佳实践。MySQL应该管理web用户,或者仅仅管理一个DB用户,其余的则在应用程序级别。
发布于 2018-09-03 23:30:03
与PHP路由一起使用。
无论您是通过PHP创建登录,还是直接通过MySQL创建登录,它们都将最终进入您的MySQL数据库。不过,这两种方法之间有一些不同。要点是,如果您使用PHP路径,您的用户将能够自己创建他们的登录(这意味着自己选择他们的密码)。如果您使用数据库路由,您的用户将不得不为他们分配密码。
在MySQL中,可以使用类似于SHA()的东西来安全地散列密码(使用salt),但据我所知,您无法在MySQL中选择更安全的加密算法。SHA-256 / SHA-512几乎可以肯定地满足您的需要,尽管您可能需要一些更安全的东西。
使用PHP,您可以访问像password_hash()和password_verify()这样的方法,这些方法可以与PASSWORD_BCRYPT或PASSWORD_ARGON2I等算法一起使用(这比标准的SHA-256或SHA-512安全得多)。
最后,您必须考虑在数据库被破坏时应该发生什么(每天大约有30,000次)。如前所述,无论是哪种情况,加密密码都存储在数据库中。如果您通过MySQL创建登录,很可能还会公开加密的方法(可能还有使用的盐类)。如果您通过PHP构建登录,攻击者将需要完整的shell访问您的网站,以便能够计算出您如何加密您的密码。
最重要的是,从不允许用户访问数据库。实际上,我建议确保主数据库用户角色只具有与数据交互的required privileges (可能是SELECT、INSERT、UPDATE),并使用具有CREATE权限的单独用户来创建用户。
https://stackoverflow.com/questions/52156987
复制相似问题