如何使用Indy连接到FTP时加密凭据?

时间:2012-12-18 22:19:28

标签: delphi ftp indy delphi-6

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

您建议什么阻止黑客获取凭据?请不要使用任何组件(甚至是免费组件)或任何需要花钱的东西。

1 个答案:

答案 0 :(得分: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;