php - 通过环境而不是硬编码提供数据库凭据
问题描述
我正在创建一个 Web 应用程序,需要连接到 MySQL 数据库。我目前正在使用 PHP 7.3。我正在使用 PDO 标准方式 ( new PDO(DB_DSN, DB_USER, DB_PASS)
) 连接到 SQL 数据库,但有人告诉我以下语句:
数据库凭据应该来自环境,而不是在源代码中硬编码。
但是,我不确定如何执行此操作。
目前,该应用程序托管在 Linux 服务器上,但正在迁移到 Azure 服务器。但在我们可以迁移它之前,他们希望我按照上述方式更改 SQL 凭证配置。
我目前正在使用此处找到的 PHP 文档注释中提供的类。
解决方案
在 Web 应用程序中存储秘密很复杂,但大多数语言/框架都有办法做到这一点。
在 PHP 中,您可以做到的一种方法是将信息存储在环境变量中,然后您可以在运行时检索这些信息。例如,您可以使用
$DB_DSN = $_SERVER["DB_DSN"];
$DB_USER = $_SERVER["DB_USER"];
$DB_PASS = $_SERVER["DB_PASS"];
您可以使用 Azure 门户中的应用程序设置选项卡设置这些环境变量。
然后,每个环境(开发机器、测试服务器、生产服务器)都可以对这些环境变量进行不同的设置。
甚至还有一个图书馆可以帮助您解决这个问题。
推荐阅读
- smalltalk - Smalltalk - iterate over a dict array with conditions
- flutter - 覆盖 SearchDelegate 的过渡动画
- javascript - Using variables as greater than / less than operators in a loop
- tomcat - 为什么即使默认端口(BranchCache 内容检索(HTTP-In))80 在 Windows 防火墙中打开,GCP 实例也需要手动允许端口 80
- python - 扩展存根中通用但在运行时不通用的基础时可能的循环定义
- azure-application-insights - 如何使应用程序洞察力忽略取消
- google-apps-script - Paragraphs with inline images breaking app script merging sheet data into doc
- javascript - Compress alphanumeric characters with a limit of 8 bytes hex character
- java - Gradle 构建卡在“等待获取守护程序地址注册表上的共享锁”。
- python - 为什么 python Visual Studio 代码中没有显示 pylint 的错误曲线?