首页 > 解决方案 > 在php中加密sql连接的密码

问题描述

我正在通过 PHP for IIS 连接到 SQL。

<?php
$connectionInfo = array("Database"=>"saz09", "UID"=>"sa", "PWD"=>"Cambiar", "CharacterSet"=>"UTF-8"); 
?>

一切正常,但由于任何人都可以访问这些文件,我想要如下内容:

<?php
$connectionInfo = array("Database"=>"saz09", "UID"=>"sa", "PWD"=>"81dc9bdb52d04dc20036dbd8313ed055", "CharacterSet"=>"UTF-8"); 
?>

对此有何建议,或者是否有其他不公开密码的方法?

标签: phpsqlencryptionpasswords

解决方案


一种解决方案是在您的应用程序中使用环境变量。您将凭据存储在系统的环境变量中,然后在应用程序中读取环境变量的值以建立数据库连接(您也可以使用某种加密)。因此,基本上,您将以下变量设置为环境变量:

  1. DB_USER
  2. DB_PASS
  3. 其他

然后在您的代码中用于getenv(VAR_NAME)建立数据库连接。所以,在你的情况下,会是这样的:

$connectionInfo = array("Database"=>"saz09", "UID"=>getenv("DB_USER"), "PWD"=> getenv("DB_PASS", "CharacterSet"=>"UTF-8"); 

在将它们的值设置到数据库连接之前,您还应该验证这两个变量的值是否存在。

积极点:

  • 您的代码中没有硬代码凭据(如果人们可以访问您的代码,他们将没有凭据),这使得更安全;
  • 它可以针对每个环境进行配置,如果其他人共享同一个项目,你们可以配置自己的数据库连接(没有意外使用生产连接的风险);

负面观点:

  • 如果有人可以访问您托管应用程序的服务器,他们就可以访问您的环境变量。

编辑:正如@Chris 所提到的,这不是一个负面因素,因为如果有人可以访问您的服务器,这意味着无论我们如何存储凭据,您的应用程序都会遇到麻烦。谢谢你的澄清,@Chris。

您还可以通过向字符串添加加密来增加安全性,并在您的代码中解密凭证字符串。

我不确定您使用的是哪个操作系统,所以这里有一个简短的指南,用于在两个最著名的操作系统中配置环境变量:

还有很多其他方法可以执行类似的方法,如果您想熟悉它们,请阅读链接:


推荐阅读