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

时间:2018-09-03 23:11:00

标签: php mysql security

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

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

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

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

什么是做到这一点的最佳方法? 稳定的php / mysql应用程序(如Dupral或Joomla)如何工作?

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

1 个答案:

答案 0 :(得分:0)

使用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构建登录名,则攻击者将需要对您的网站具有完全的外壳访问权限,以便能够确定如何对密码进行加密。


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