在readfile URL中包含用户名和密码是否安全?


Is it safe to include username and password in readfile URL?

我想直接从FTP服务器获取文件到客户端。但是FTP连接需要认证。这是我的文件:

readfile("ftp://$ftp_username:$ftp_password@$ftp_server/$filename");

按预期工作。但是,我想知道是否有安全风险。用户是否可以访问用户名和密码?

您需要考虑的是,其中密码可能可见。有三个地方我可以看到:

  1. 无论$ftp_password变量来自何处(配置文件,PHP硬编码,数据库,…)。泄露了这个,你就有了密码。存储它的任何地方都是可读的,因为你必须读取它,但是你可以将部分存储在不同的地方——在数据库中存储加密密码,在磁盘上存储加密密钥。
  2. 在运行的PHP代码中。如果您使用任何类型的密码,这都是非常棘手的,但是如果攻击者可以在您的服务器上运行任意PHP代码,那么您已经有大麻烦了。只要确保不要在生产服务器上以错误消息等方式回显任意的PHP代码。
  3. 在FTP流量本身中。FTP是互联网上最古老的协议之一,它传输密码的方式本身就不安全。如果你控制服务器,你可以使用FTPS或FTPS,这是一种安全扩展,有点像HTTPS到HTTP;或者您可以切换到SFTP,尽管它的名称是一个完全不同的协议,其中文件使用SSH连接传输。SFTP(因为它是基于SSH的)也可以支持基于密钥的身份验证,而不仅仅是一个密码,尽管你仍然需要在某个地方存储一个私钥。