比在配置文件中以纯文本格式存储mysql密码更好的方法?

ck_*_*ck_ 38 php mysql security passwords

很多PHP程序都要求用户以明文形式(以字符串或常量形式)将mysql密码存储在应用程序根目录的配置文件中,这一直困扰着我.

经过这么多年,有没有更好的方法呢?

到目前为止,我已经提出了两个最小的安全性提升:

  1. 使用.htaccess中的规则通过网络使文件无法读取(如果php失败或有安全漏洞需要读取php源代码)

  2. 在建立db connect(unset)之后销毁内存中的密码(以防止来自安全漏洞,注入等的字符串转储)

但当然这些都没有解决原来的问题.

感谢您的任何其他想法!

Mar*_*ean 25

就个人而言,我将敏感信息(如数据库连接详细信息)存储在我的Web文件夹根目录之外的config.ini文件中.然后在我的index.php中,我可以这样做:

$config = parse_ini_file('../config.ini');
Run Code Online (Sandbox Code Playgroud)

这意味着如果您的服务器意外地开始以纯文本形式输出PHP脚本(之前发生过,臭名昭着的Facebook),则变量不可见; 只有PHP脚本才能访问变量.

它也不依赖于.htaccess,如果您的.htaccess文件被移动或销毁,则没有意外情况.

2017年2月14日补充说:我现在将配置参数存储为环境变量.我暂时没有使用.ini文件方法.


Pau*_*nis 12

将配置文件保留在文档根目录之外是提高配置文件安全性的常用方法.

  • 我只是打字那个.我打算在子条款中指出,即使不是大多数共享主机,也不会让客户访问文档根目录之外的任何内容. (3认同)

mvd*_*vds 12

由于您的代码需要密码,因此没有完美的安全性.但是你可以让它很难恢复.

我把一些哈希值放在我的web配置中,作为一个环境变量 MYSQL_PASS_HASH

然后我做一些像md5(getenv('MYSQL_PASS_HASH').'gibberish$qwefsdf')密码那样的东西.当然unsetenv,如果你是偏执狂,你应该在那之后.

您的密码不会存储在某个地方,只有当某人同时拥有您的Web配置您的数据库包含时,才能恢复它.

这发生在webroot之外的文件中(不要完全信任.htaccess).

  • 这个短语的"模糊"部分意味着简单地隐藏(问题),所以实际上你的方法在技术上比简单地在webroot之外移动纯文本更好.只是移动文件肯定是"默默无闻". (9认同)