如何在 C# 应用程序中安全地存储 FTP 凭据?

How to store FTP credentials securely in C# application?

我正在开发一个 C# WPF 应用程序,用户在其中生成图像,然后该应用程序使用 FTP 连接将其上传到虚拟主机。 FTP 连接的凭据始终相同,目前仅存储在源代码中。 我知道使用 .NET Reflector,黑客可以很容易地获取 FTP 连接的用户名和密码。 我如何以及在哪里存储这些凭据以防止反编译? 或者有没有更好的方法而不是使用 FTP 上传文件?

您不能允许用户访问本身知道您不希望用户知道的凭据的程序。用户将始终 能够最终从程序中提取凭据。您也许可以减慢它们的速度,但通常的复制保护演算适用:

  • 如果信息的价值足以让您认为您需要保护它,那么它的价值就足以让其他人绕过您的保护。
  • 如果您在保护上投入了足够的精力以确保其他人绕过您的保护是不值得的,那么您的投资本身就超过了信息的价值(即您花费了太多)。

根据您与用户的关系以及他们使用的计算机,您有一些选择:

  • 向他们提供凭据,以便在安装后输入到程序配置中。当然,只有在您信任他们的情况下才这样做。
  • 将 FTP 连接代码实现为 Windows 服务。将凭据提供给将安装该程序的其他人,后者将安装使用凭据配置的服务。用户将只能访问将与服务通信的客户端程序,而服务又将代表用户处理 FTP 通信。同样,仅当您信任安装该程序的人时才执行此操作,并且不受信任的用户在计算机上没有管理员权限。
  • 颁发每用户凭据。坦率地说,这是恕我直言的最佳方法。优势包括:
    • 用户不知道任何会影响其他人资源安全的事情,
    • 您不必试图向用户隐藏任何内容,
    • 您可以监控每个用户对 FTP 资源的访问,并且
    • 您可以撤销特定用户的凭据而不影响您的其他用户。