我正在使用PHP构建一个简单的设备配置助手。设备将从ini文件中提取其配置数据。在文件中写入和读取数组数据是没有问题的,并且工作正常
我的问题是:该文件的一部分包含SMTP邮件服务器数据,包括用户名和密码。只要包含双引号的密码已写入文件,从中读取会导致异常,自然(假设smtp_auth_pw="pass5"word"
:将导致syntax error, unexpected 'w'
)。
使用数据库是不可取的。对我来说唯一可行的解决方案是:
使用JS在用户客户端上对密码进行Base64编码,告诉操作系统软件开发人员对其进行解码(客户端上的大量计算负载)
使用PHP在服务器上对密码进行Base64编码,告诉操作系统软件开发人员在其末尾对其进行解码(单个值的复杂性 )
逃避所有不安全的角色,告诉操作系统软件开发人员最终解决这些问题(单个值的复杂性很高,可能是开发人员之间的误解)
禁止在密码中使用不安全的字符(对用户的不舒服限制)
这两种选择似乎对我都不利。关于如何处理ini文件中不安全字符串的建议?
答案 0 :(得分:2)
逃避所有不安全的角色,告诉操作系统软件开发人员最终忽视他们
确切地说,这就是需要做的事情。您正在以INI格式编写文件,这意味着您需要符合INI语法。
(单个值的复杂性很高,可能是开发人员之间的误解)
不,这不复杂。每当您以特定格式(此处为:INI)读取数据时,您需要根据该格式的规范读取它,包括任何和所有转义规则。如果您使用库来读取和/或写入该格式,那么该库已经明确地认为这些转义规则。在遵守INI逃避规则方面绝对没有任何开销,开发人员之间也没有误解,因为这是处理任何和所有专门文本格式的标准做法。
另见The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
答案 1 :(得分:1)
首先,将密码存储在纯文本文件中是一个糟糕的主意,但这不是您的问题,所以假设您已经考虑过安全风险,我建议您使用urlencode()
来转换字符像引号和冒号一样,可以使用urldecode()