通过环境而非硬编码提供数据库凭证

问题描述 投票:0回答:3

我正在创建一个Web应用程序,需要连接到MySQL数据库。我目前正在使用PHP 7.3。我正在使用PDO标准方式(new PDO(DB_DSN, DB_USER, DB_PASS))连接到SQL数据库,但已被告知以下语句:

数据库凭据应来自环境,而不应在源代码中进行硬编码。

但是,我不确定该怎么做。

当前,该应用程序托管在Linux服务器上,但正在迁移到Azure服务器。但是在我们迁移它之前,他们希望我如上所述更改SQL凭据配置。

我当前正在使用PHP文档注释here中提供的类。

php sql azure pdo
3个回答
0
投票

有多种方法可以实现,但都不容易。但是,一种快速简便的方法是将凭据保存在服务器上的外部文件中,让php从中获取凭据并使用htaccess对其进行保护。

1。准备文件:-

  1. 在服务器上创建一个名为“ _secure”的文件夹。
  2. 在“ _secure”下创建一个名为“ creds.ini”的文件,其中包含username|password
  3. 在“ _secure”下创建一个名为“ .htaccess”的文件。

2。保护您的凭据:-

在您的“ .htaccess”文件中,添加以下文本:-

# Deny access to .htaccess
<Files .htaccess>
Order allow,deny
Deny from all
</Files>

# Disable directory browsing 
Options -Indexes

# Deny access to files with extensions .ini
<FilesMatch "\.(ini)$">
Order allow,deny
Deny from all
</FilesMatch>

3。与PHP集成:

在您的php中,使用以下代码:-

$creds = explode('|', file_get_contents("creds.ini"));
new PDO(DB_DSN, $creds[0], $creds[1]);

您必须根据用法自定义名称和php代码,这些只是示例代码和名称。


0
投票

假设您当前的Linux安装使用Apache作为Web服务器,您可以像这样在其配置文件(httpd.conf或.htaccess)中配置环境变量

SetEnv DB_USER whatever

如果是它的Nginx,它将是

fastcgi_param DB_USER whatever;

此后,可以使用$_ENV数组像这样访问这些值>

new PDO($dsn, $_ENV['DB_USER'], $_ENV['DB_PASS']);

((请注意,因为它太局限在PDO中,所以我会避免将整个DSN存储在环境中。最好存储诸如DB_HOST和DB_NAME之类的常规参数,然后从它们中调用DSN)

鉴于Azure没有使用任何一种,您将不得不在Windows GUI上配置此类变量,如在此答案What Can Access "App Settings Key Values"?中所述的某些GUI应用程序中>

当然,对于在本地开发服务器上运行代码的所有实例,都应重复该过程。

将秘密存储在Web应用程序中很复杂,但是大多数语言/框架都有这样做的方法。

[在PHP中,一种方法是将信息存储在环境变量中,然后可以retrieve at run time.例如,可以使用

$DB_DSN = $_SERVER["DB_DSN"];
$DB_USER = $_SERVER["DB_USER"];
$DB_PASS = $_SERVER["DB_PASS"];

然后每个环境(开发机器,测试服务器,生产服务器)可以对这些环境变量进行不同的设置。

甚至还有library可以帮助您。


-1
投票

将秘密存储在Web应用程序中很复杂,但是大多数语言/框架都有这样做的方法。

© www.soinside.com 2019 - 2024. All rights reserved.