在ini文件中存储和检索密码


PHP - store and retrieve a password from/in an ini file

我正在用PHP构建一个简单的设备配置助手。设备将从ini文件中获取配置数据。从文件中写入和读取数组数据没有问题,并且工作良好。
我的问题是:文件的一部分包含SMTP邮件服务器数据,包括用户名和密码。一旦包含双引号的密码被写入到文件中,从它读取会自然地导致一个异常(假设smtp_auth_pw="pass5"word":会导致syntax error, unexpected 'w')。

不能使用数据库。在我看来唯一可行的解决方案是:

  • base64在用户客户端用JS编码密码,告诉操作系统软件开发人员在他们端解码(客户端计算量巨大)

  • base64 -在服务器端用PHP编码密码,告诉操作系统软件开发人员在他们的端解码(单个值非常复杂)

  • 转义所有不安全的字符,告诉操作系统软件开发人员在他们的终端上取消转义(单个值太复杂了,可能是开发者之间的误解)

  • 完全禁止在密码中使用不安全字符(对用户的不舒服限制)

两个选项对我来说似乎都不合适。关于如何处理ini文件中的不安全字符串的建议?

转义所有不安全的字符,告诉操作系统软件开发人员在他们结束时取消转义

是的,这就是需要做的。您正在以INI格式编写文件,这意味着您需要遵守INI语法。

(单个值太复杂,可能导致开发人员之间的误解)

不,这不是复杂性。无论何时以特定格式读取数据(这里是INI),都需要根据该格式的规范读取数据,包括所有转义规则。如果您使用库来读取和/或写入该格式,这些转义规则应该已经被该库透明地视为。在遵守INI转义规则方面绝对不应该有任何开销,开发人员之间也不应该有任何误解,因为这是处理任何和所有特殊文本格式的标准做法。

也可参见The Great Escapism(或:如何在文本中使用文本)

首先,将密码存储在明文文件中是一个糟糕的主意,但这不是你的问题,所以假设你已经考虑了安全风险,我可能建议使用urlencode(),它将转换引号和冒号等字符,并且很容易与urldecode()

解码