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

PHP-在ini文件中存储和检索密码,php,passwords,ini,Php,Passwords,Ini,我正在用PHP构建一个简单的设备配置助手。设备将从ini文件中提取其配置数据。在文件中写入和读取数组数据没有问题,工作正常。 我的问题是:文件的一部分包含SMTP邮件服务器数据,包括用户名和密码。一旦将包含双引号的密码写入文件,从中读取会导致异常,自然会假定smtp_auth_pw=pass5word:将导致语法错误,意外的“w” 使用数据库是没有选择的。我认为唯一可行的解决方案是: Base64使用JS在用户客户端对密码进行编码,告诉操作系统软件开发人员在客户端对密码进行解码,这会给客户端带来

我正在用PHP构建一个简单的设备配置助手。设备将从ini文件中提取其配置数据。在文件中写入和读取数组数据没有问题,工作正常。 我的问题是:文件的一部分包含SMTP邮件服务器数据,包括用户名和密码。一旦将包含双引号的密码写入文件,从中读取会导致异常,自然会假定smtp_auth_pw=pass5word:将导致语法错误,意外的“w”

使用数据库是没有选择的。我认为唯一可行的解决方案是:

Base64使用JS在用户客户端对密码进行编码,告诉操作系统软件开发人员在客户端对密码进行解码,这会给客户端带来巨大的计算负载

Base64使用PHP在服务器上对密码进行编码,告诉操作系统软件开发人员在他们的终端上对密码进行解码,对于单个值来说,这非常复杂

避开所有不安全的字符,告诉操作系统软件开发人员,为了一个单一的值,在他们的终端上消除他们的复杂性,可能在开发人员之间产生误解

无论如何都不允许在密码中使用不安全的字符对用户造成不适的限制


两种选择对我都不有利。关于如何处理ini文件中不安全字符串的建议?

首先,将密码存储在纯文本文件中是一个糟糕的主意,但这不是你的问题,因此假设你考虑了安全风险,我是否建议使用urlencode,它将转换引号和冒号等字符,并且很容易用URDECODE解码

转义所有不安全的字符,告诉操作系统软件开发人员在其端取消转义

没错,这就是我们需要做的。您正在以INI格式编写文件,这意味着您需要符合INI语法

单个值非常复杂,开发人员之间可能存在误解

不,这不是复杂性。每当您在此处读取特定格式的数据时:INI,您都需要根据该格式的规范读取数据,包括任何和所有转义规则。如果使用库读取和/或写入该格式,则该库应该已经透明地考虑这些转义规则。遵守INI转义规则绝对没有开销,开发人员之间也没有误解,因为这是处理任何和所有专业文本格式的标准实践


另请参见。

ini文件必须有一个定义的语法如何安全地嵌入分隔符,否!?类似smtp\u auth\u pw=pass5\word的内容。任何使用特殊字符的正常语言都有这一点。如果这是你唯一的问题,那就想想吧。不要过分使用加密或散列,这与当前的问题无关。请对下一票有何评论?如果我不知道为什么我的问题对你来说似乎没有用处/不清楚或研究得不好,你认为这会有什么帮助@deceze PHP只是逐行读取文件,可以进行转义,但我不想更改字符串本身。散列字符串实际上与此有关,因为它可以消除所有不安全字符,同时保持内容不变。是的,散列可以解决这个问题,但它会带来一个新问题,即您无法访问密码。如果您想用ini这样的语言表示一个值,那么您需要遵守该语言的语法规则。在这种情况下,这意味着您需要正确地转义您的值。唯一不会出现此问题的情况是,如果将密码转储到纯文本文件中,并且密码是该文件的唯一内容。Base64编码与使用MD5等散列完全不同。是的,base64编码就可以了。散列不会,因为这发生在一个带有加密文件系统的嵌入式linux上,所以我希望它足够安全,尽管我在这方面没有发言权。urlencode是一个好主意@莫弗里德里奇,我没有投你反对票,但这可能就是为什么有人投了反对票。如果.ini文件位于公共Web服务器上,则系统是否加密并不重要。请确保您已将.ini文件的chmoded设置为700左右,或任何可以使public无法请求文件/@MoF的文件,如果您不愿意根据ini格式转义该值,但愿意对其进行URL编码…?:-/@Adelphia,正如我所说,安全不是我的责任,ini文件位于公共web根目录之外,设备将仅在本地网络中使用…@MoFriedrich urlencode/URLEDECODE或base64都可以满足您的需要。试一试: