在生产服务器上,错误输出肯定会在常规情况下关闭。不过,即使在我的开发屏幕上,当我看到这样的错误消息时,我也感到很沮丧:
stat(): stat failed for ftp://user:pass@127.0.0.1:21/dir-de-nada
这是在我围绕ftp://
流编写的类的上下文中。当然,PHP无法从任意位置过滤掉密码。但在这种情况下(与URL包装器和其他任何地方一样),密码的存在是标准的,也是显而易见的。
我已经抓住了这些错误。然而,我发现自己想知道自己是否需要X这些,只是为了在所有情况下保持安全,或者如果有办法我可以让PHP自动和全局地进行。(那是这里的问题。)我猜不是,但在这里投掷探测器没有任何害处。
至于我担心的是,它只在我的开发屏幕上。但是,错误报告也与网站管理员等有关,他们可能不需要知道FTP密码。将FTP密码放入错误日志中是不太重要的,但对于保存到数据库中的报告等 - 我真的不希望这种信息传播到任何地方,原因显而易见。预防指针好吗?
如果有人想要提供相关说明,以防止PHP在任何情况下脱口而出密码等敏感信息,那也是受欢迎的。除了“不要随处输出任何东西”。
编辑:更好的待处理选项,我的错误和异常处理程序的消息部分现在运行:
$msg = preg_replace('#((ftp|http)://)([^@]+?)@#', '$1*:*@', $msg);
如果使用SSH2流,请在ssh2\.(shell|exec|sftp|scp)
中添加正则表达式。好的方法是,如果你使用显示参数的堆栈跟踪,那么也要清理它们。
Edit2:关于PHP FTP流上下文包装器体验的一般说明。
create_stream_context
/ $param['notification']
中定义)主要记录空白/部分而不是来自FTP服务器的完整响应。stream_context_create
资源,PHP也会在同一个脚本中为每个filesys调用重新登录。 假设FTP流上下文适用于一次性基本交易,但对于尝试一次性做任何事情都是严重的,感觉有点像不成熟的alt。 filesys功能的装备。下一步...
答案 0 :(得分:1)
没有。
我认为可以在stream context中配置用户名和密码,但这是not an option。
您可以通过使用不使用URI(FTP或Curl)的API来防止这种情况发生,但这意味着更详细的代码。
在生产系统上禁用错误报告绝对是必需的。但是,启用自己的错误处理程序(在开发/测试以及生产中 - 具有特定于环境的功能)可以提供额外的保护层。
尝试篡改输出流以控制错误消息的内容是非启动性的。但它在你的错误处理程序中肯定是一个好主意。为什么你的正则表达式中有硬编码方案?
#(([a-zA-Z]+)://)([^@]+?)@#