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

标签 php mysql security

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

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

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

对于 DB 选项,我认为我们需要在 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 访问权限,以便能够弄清楚您如何加密密码。

<小时/>

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

关于PHP、MySQL 应用程序用户和凭据应该在应用程序或数据库上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156987/

相关文章:

c# - 通过网络运行 .net 应用程序

php - wordpress 中的 AJAX 和 PHP 循环进度

php - 使用 php 和 MySQL 将数据获取到 jQuery UI availableTag

php - 我的 PHP 脚本的安全性

php - MySQL 数据库查询不返回任何内容

mysql - SQL : How to use SELECT results as function input parameters

javascript - XHR2 认证请求 - 安全/可伪造?

php - nodeJS + Socket.IO 和 PHP 如何集成?

php - 如何获取数组范围

mysql - MySQL 中 .query() 和 .execute() 的区别