如果我在php中使用system()函数,并且命令包含密码,那么这有多不安全?

如果我在php中使用system()函数,并且命令包含密码,那么这有多不安全?,php,security,unix,passwords,Php,Security,Unix,Passwords,我有一个生成报告的php脚本。此报表的最终用户希望将其上载到他们可以访问的服务器。我有一个拥有SFTP权限的帐户,可以将文件上载到他们的服务器 一种方法是打电话 system("lftp -e ... -u user,password sftp://host"); 我知道在命令行上提供密码通常是不安全的,因为其他用户可以看到带有w和ps等程序的命令行 由于这是从php过程中完成的,这有什么不同吗,还是同样不安全 显然,使用CURL或其他库进行SFTP连接将是最安全和“正确的方法”。这个问题是关

我有一个生成报告的php脚本。此报表的最终用户希望将其上载到他们可以访问的服务器。我有一个拥有SFTP权限的帐户,可以将文件上载到他们的服务器

一种方法是打电话

system("lftp -e ... -u user,password sftp://host");
我知道在命令行上提供密码通常是不安全的,因为其他用户可以看到带有w和ps等程序的命令行

由于这是从php过程中完成的,这有什么不同吗,还是同样不安全


显然,使用CURL或其他库进行SFTP连接将是最安全和“正确的方法”。这个问题是关于这个特殊问题的教育,所以我不需要任何人告诉我使用curl。ftp示例只是一个示例。

我可以想到3个潜在问题:

  • 使用ps可见(就像从控制台一样)
  • 可能(不确定是否真的)存储在shell历史记录中,也就是说,存储在hdd上(就像从控制台)
  • 如果您在源文件中保留密码而不是将其保留在变量中,那么它也在VCS中(与控制台不同)

这没什么不同。PHP中的shell exec的工作原理与用户手动键入该命令的工作原理基本相同,您的密码将显示在ps列表中。(至少对于lftp)一些程序(如ncftp和curl)会调整自己的命令行,用伪字符覆盖用户/过程。@Alex:覆盖
argv
的内容合法/可移植吗?你能跨平台依赖这种行为吗?C标准似乎表明它是可移植的。然而,它的使用肯定是不一致的,我从不建议在安全上下文中依赖它。