PHP - 存储和检索密码 from/in 一个 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 在用户客户端对密码进行编码,告诉 OS 软件开发人员在他们的端解码它(客户端的巨大计算负载)
Base64-在服务器上使用 PHP 对密码进行编码,告诉 OS 软件开发人员在他们的终端对其进行解码(复杂度很高单值)
转义所有不安全的字符,告诉 OS 软件开发人员最终将它们转义(单个值的复杂性很高,开发人员之间可能存在误解)
根本不允许在密码中使用不安全的字符(对用户的限制令人不安)
这两个选项似乎都不适合我。关于如何处理 ini 文件中的不安全字符串的建议?
首先,将密码存储在明文文件中是个糟糕的主意,但这不是你的问题,所以假设你已经考虑了安全风险,我建议使用 urlencode()
转换引号和冒号等字符,并且可以使用 urldecode()
轻松解码
Escape all unsafe characters, tell the OS software developers to unescape them on their end
是的,这就是需要做的。您正在编写 INI 格式的文件,这意味着您需要符合 INI 语法。
(Much complexity for a single value, possibly misunderstandings between devs)
不,这并不复杂。每当您以特定格式(此处为:INI)读取数据时,都需要根据该格式的规范(包括任何和所有转义规则)进行读取。如果您使用一个库来读取 and/or 写入该格式,这些转义规则应该已经被该库透明地考虑。遵守 INI 转义规则应该绝对没有开销,开发人员之间也没有误解,因为这是处理任何和所有专用文本格式的标准做法。
另见 The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
我正在使用 PHP 构建一个简单的设备配置助手。设备将从 ini 文件中提取其配置数据。向文件写入数组数据和从文件读取数组数据没有问题,工作正常。
我的问题是:文件的一部分包含 SMTP 邮件服务器数据,包括用户名和密码。一旦将包含双引号的密码写入文件,读取它自然会导致异常(假设 smtp_auth_pw="pass5"word"
:将导致 syntax error, unexpected 'w'
)。
使用数据库是不可行的。对我来说唯一可行的解决方案是:
Base64-用 JS 在用户客户端对密码进行编码,告诉 OS 软件开发人员在他们的端解码它(客户端的巨大计算负载)
Base64-在服务器上使用 PHP 对密码进行编码,告诉 OS 软件开发人员在他们的终端对其进行解码(复杂度很高单值)
转义所有不安全的字符,告诉 OS 软件开发人员最终将它们转义(单个值的复杂性很高,开发人员之间可能存在误解)
根本不允许在密码中使用不安全的字符(对用户的限制令人不安)
这两个选项似乎都不适合我。关于如何处理 ini 文件中的不安全字符串的建议?
首先,将密码存储在明文文件中是个糟糕的主意,但这不是你的问题,所以假设你已经考虑了安全风险,我建议使用 urlencode()
转换引号和冒号等字符,并且可以使用 urldecode()
Escape all unsafe characters, tell the OS software developers to unescape them on their end
是的,这就是需要做的。您正在编写 INI 格式的文件,这意味着您需要符合 INI 语法。
(Much complexity for a single value, possibly misunderstandings between devs)
不,这并不复杂。每当您以特定格式(此处为:INI)读取数据时,都需要根据该格式的规范(包括任何和所有转义规则)进行读取。如果您使用一个库来读取 and/or 写入该格式,这些转义规则应该已经被该库透明地考虑。遵守 INI 转义规则应该绝对没有开销,开发人员之间也没有误解,因为这是处理任何和所有专用文本格式的标准做法。
另见 The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。