关于delphi:如何使用Indy连接到FTP时加密凭据?

How to encrypt credentials while connecting to FTP using Indy?

最近我注意到在wireshark中我可以看到我的ftp用户名/密码,我用来连接到我的ftp服务器来上传一个文件(delphi 6和indy 9或10,我相信)。我想通过加密密码来防止这种情况,但我不确定从哪里开始。

你建议如何阻止黑客获取证书?请不要使用组件(甚至免费组件)或任何需要花钱的组件。


在纯FTP协议中,您没有加密任何内容的方法,因此凭证以纯文本形式传输,文件、列表等在服务器之间不加密。

如果您的服务器支持ftps,这是一个普通的通过SSL加密连接的ftp会话,那么您可以使用正在使用的相同tidtp对象进行此操作,但可以将默认IO处理程序更改为支持SSL的处理程序,例如,tidsliohandlersocketopenssl的一个实例,该实例使用流行的openssl库进行加密。

在代码中,它看起来像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;