我已经看过很多关于将硬编码的敏感信息(API密钥字符串,数据库密码)保存为环境变量以保证安全性的文章。我对这个概念有点新意,虽然我在rails方面看到了很多东西,但在PHP方面却没有那么多。
在为用户创建初始mysql数据库信息时,偶数PHP FOG使用此类设置。
我真的不明白这是设置的位置,以及如何使用任何特定的php网页/应用程序检索它。我真的从保持我的交易电子邮件API密钥和其他信息安全可用的角度来看待这个问题。
例如,如果我只创建一个config.php文件并将其放在我的站点根目录中,那么这与我的代码中直接调用密钥有什么不同吗?应该在哪里设置环境变量以及调用它们的最有效方式是什么?我也很好奇这与SESSION变量有何不同?
注意:我正在运行与Nginx配对的LAMP堆栈。
更新1: One of these users倾向于反对使用环境变量,而不仅仅是非公共变量"文件,但我真的不知道这是多么不同。
更新2: 从Windows的角度来看,这篇文章似乎也有一些普遍意义(假设* nix需要更改php include路径?)。尽管如此,这有什么好处,而不仅仅是将API Key直接硬编码到PHP脚本中?
答案 0 :(得分:0)
我认为这与系统集成有关,而不是与具体的安全性相关。
环境变量可用于创建脚本运行的上下文。然后脚本本身将这些作为(隐藏)依赖项。
因此,您可以在不同的环境(环境设置)中执行相同的脚本,而无需更改任何代码行(包括但不限于)基于php的配置文件。
例如,当您自动部署脚本时,部署系统通常能够设置环境变量,因为原则很常见。您无需修改部署脚本,以便他们知道您的特定配置文件,以便他们可以更改它们。
从安全角度来看,没有太大区别。环境变量可以公开访问,也可以访问脚本中的全局变量。