php - 在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");
?>
对此有何建议,或者是否有其他不公开密码的方法?
解决方案
一种解决方案是在您的应用程序中使用环境变量。您将凭据存储在系统的环境变量中,然后在应用程序中读取环境变量的值以建立数据库连接(您也可以使用某种加密)。因此,基本上,您将以下变量设置为环境变量:
- DB_USER
- DB_PASS
- 其他
然后在您的代码中用于getenv(VAR_NAME)
建立数据库连接。所以,在你的情况下,会是这样的:
$connectionInfo = array("Database"=>"saz09", "UID"=>getenv("DB_USER"), "PWD"=> getenv("DB_PASS", "CharacterSet"=>"UTF-8");
在将它们的值设置到数据库连接之前,您还应该验证这两个变量的值是否存在。
积极点:
- 您的代码中没有硬代码凭据(如果人们可以访问您的代码,他们将没有凭据),这使得更安全;
- 它可以针对每个环境进行配置,如果其他人共享同一个项目,你们可以配置自己的数据库连接(没有意外使用生产连接的风险);
负面观点:
- 如果有人可以访问您托管应用程序的服务器,他们就可以访问您的环境变量。
编辑:正如@Chris 所提到的,这不是一个负面因素,因为如果有人可以访问您的服务器,这意味着无论我们如何存储凭据,您的应用程序都会遇到麻烦。谢谢你的澄清,@Chris。
您还可以通过向字符串添加加密来增加安全性,并在您的代码中解密凭证字符串。
我不确定您使用的是哪个操作系统,所以这里有一个简短的指南,用于在两个最著名的操作系统中配置环境变量:
- 视窗:https ://www.computerhope.com/issues/ch000549.htm
- Linux:https ://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/
还有很多其他方法可以执行类似的方法,如果您想熟悉它们,请阅读链接:
推荐阅读
- c - gcc - 致命错误:libusb.h:没有这样的文件或目录
- node.js - 为 Nodejs 应用程序登录后难以显示用户名
- excel - 是否可以在另一个地方镜像图表?
- javascript - 在 axios.get reactJS 上请求中止
- java - Xposed findClass() 返回 java.lang.Class
- c# - 何时以及如何使用构造函数初始化(视图)模型,目的是正确设置对象的所有道具并且忘记任何道具
- python - 主窗口前的 PyQt5 启动画面
- reactjs - React Native Expo build:web 空白页
- python - Python 启动器尝试从我已经卸载的 Python 安装运行 Pip
- node.js - 如何从 REST API 获取特定数据?