如何保护程序源代码中的ftp账号信息

信息安全 应用安全 验证 密码 源代码
2021-08-23 01:17:52

我写了一个在 ftp 服务器上存储高分信息的游戏。在源代码中,我需要写出包含帐户名和密码的 ftp 链接。

例如:

url = new URL("ftp://name:password@www.mywebsite.com/");

这是java,顺便说一句。在类文件中,字符串被保留在源代码中。因此,如果有人能够读取类文件,则可以找到这个字符串ftp://name:password@www.mywebsite.com/,用户名和密码一目了然,就像类文件中的轻微内容一样简单反正。

保护用户名和密码的适当方法是什么?

编辑

我在 java 中创建了一个加密类,并用加密的用户名和密码调用加密器替换了名称和密码,例如:

url = new URL("ftp://Crypter.crypt("q345uih34",3)+:+Crypter.crypt("nfk3iugr29o8",-2)+@www.mywebsite.com/");

这足够了吗?而且我不确定混淆是否是最好的解决方案。

4个回答

在这种情况下有许多攻击向量,因此仅隐藏密码无济于事:

  • 您提供给人们的任何代码都可以被操纵。这意味着攻击者可以将他的高分设置为任意值
  • ftp,以您使用的方式,是未加密的,因此完整的通信将显示在网络嗅探器(如Wireshark )中
  • 攻击者可以在 URL 类的构造函数上设置一个断点(非常简单但有点烦人,因为通常有很多对 new URL() 的调用。
  • 攻击者可以反编译源代码并搜索“新 URL”,混淆是没有用的,因为这个方法是 Java API 的一部分,因此不能被混淆。如果他不能理解源代码,他可以添加调试输出或将断点放在更好的地方。
  • 攻击者可以使用字节码增强将日志消息添加到 URL 类的构造函数中

因此,隐藏 ftp 密码的方式和位置并不重要。

唯一好的解决方案是让服务器自己进行高分计算(即使这样也有机器人的问题)。您至少应该使用支持加密的协议(https、sftp、ftps)。您需要确保知道凭据的人不会破坏其他用户的高分数据。这可以通过只允许在 ftps/sftp-server 中创建新文件的严格权限或通过使用接受数据并自行存储的 Web 应用程序来完成。

FTP 可能是解决此问题的错误方法。这是一个明文协议,因此任何拥有嗅探器的人都可以拦截身份验证请求并提取凭据,无论您在程序中对它们进行了多少混淆。

为什么您不能将一些键/值对作为 $post 请求发送到您的服务器,并进行某种身份验证以确保它不被操纵?

严重混淆,谷歌建议将任何潜在的重要信息分解成夹头并将其存储在随机位置。我只是建议用一个非常简单的网络应用程序制作一个非常简单的数据库。App Engine 有一个免费的基于配额的 Java 网络托管。还有其他免费的网络主机可以满足您的需求。

然而,将凭据存储在程序中会咬你一口。