如何使用Indy在连接FTP时加密凭证?

4

最近我注意到在WireShark中可以看到我连接FTP服务器并上传文件时使用的FTP用户名/密码 (使用Delphi 6和Indy 9或10,我相信)。我想通过加密密码来防止这种情况发生,但我不知道从哪里开始。

您有什么建议来防止黑客获取凭据?请不要提供组件(即使是免费的)或任何花费金钱的东西。


1
你可以尝试切换到FTPS协议,参见http://en.wikipedia.org/wiki/FTPS。 - R-D
1
不,要使用FTPS,您需要为您的TIdFTP分配适当的“IOHandler”,并在登录之前建立安全连接。当然,您要连接的服务器必须支持FTPS。 - TLama
3
这是 你可能开始查看的地方。而且,Indy 9不支持FTP的SSL,所以如果你正在使用Indy 9,如果想要使用FTPS,现在是升级的时候了。 - TLama
1
我已经制作了一个演示项目(使用Delphi 2009),它可以连接并列出由http://secureftp-test.com托管的公共安全FTP服务器的根文件夹。如果你很幸运,这个项目也许适用于你。 - TLama
1
您也可以尝试切换到HTTPS(WebDAV)协议。 - Arioch 'The
显示剩余7条评论
1个回答

6

的FTP协议中,您没有任何手段来加密任何内容,因此凭据以明文形式传输,文件、列表等也未经加密地在服务器和客户端之间传输。

如果您的服务器支持FTPS,这是在SSL加密连接上进行的普通常规 FTP会话,那么您可以使用相同的TIdFTP对象进行操作,只需将默认IO处理程序更改为具备SSL功能的处理程序,例如TIdSSLIOHandlerSocketOpenSSL实例,它使用流行的OpenSSL库进行加密。

代码示例:

var
  ftp: TIdFTP;
  ssl: TIdSSLIOHandlerSocketOpenSSL;
begin
  ftp := TIdFTP.Create();
  try
    ssl := TIdSSLIOHandlerSocketOpenSSL.Create(ftp);
    ftp.IOHandler := ssl;
    ftp.Host := 'ftp.myserver.com';
    ftp.Username := 'myuser';
    ftp.Password := 'mypass';
    ftp.Connect;
    DoWhateverYouWantToDoWithThe(ftp);
    AndUploadMoreFiles(ftp);
    ftp.Disconnect;
  finally
    ftp.Free;
  end;
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接