【问题标题】:How to secure an SFTP password in an APK file如何保护 APK 文件中的 SFTP 密码
【发布时间】:2014-09-19 20:57:54
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序具有将图像/文件上传到 FTP 服务器的服务。

为此,设备上的应用必须在发送数据之前登录 FTP 服务器。

我的问题来了。用户不需要/必须知道 FTP 登录数据。只有应用程序本身。我必须将登录数据存储在 Java 类中。但是我应该如何保护用户和密码呢?

我可以加密或混淆它。但是我认为当JVM调用“setPassword(passwordString)”方法时,黑客有可能在运行时读取密码:

String passwordString = "myPass";

JSch ssh = new JSch();
session = ssh.getSession(SFTP_USER, HOST_ADDRESS, 22);
session.setPassword(passwordString);

那么我如何将我的凭据存储在APK 文件中并保护它们?我不希望任何人访问我的 FTP 服务器。

【问题讨论】:

标签: java android security sftp credentials


【解决方案1】:

如何将我的凭据存储在 APK 文件中并保护它们?我不希望任何人访问我的 FTP 服务器。

上述问题无法解决。

你的混淆技术有多聪明并不重要。如果您在 APK 文件中隐藏固定凭据,那么分析您的应用的人就会找到它们。

如果您只从这个答案中得到一件事,那就是 为您的服务器设置一个静态密码是非常有问题的,因为您将永远无法更改密码服务器 -一边,因为你会破坏所有的应用程序。您的密码被公众知晓只是时间问题,您对此无能为力。

任何合理的方法都需要为每个单独的用户提供单独的访问凭据。

包含确认电子邮件的传统用户注册系统是一种非常好的方法。您可以使用Google+ 登录或 Facebook Connect 之类的方式来最大程度地减少最终用户的麻烦。

如果您绝对坚持零用户交互,一种可能(在某种程度上)可行的方法是让应用注册Google Cloud Messaging,然后向其发送包含访问凭据的推送通知,应用将存储在 KeyChain 中.

如果您为每个应用安装生成唯一的用户 ID 和密码,您将能够监控服务器并阻止任何滥用访问凭据,而不会影响任何其他用户。如果您以某种方式将 APK 文件的代码签名身份考虑在内,那么您将对人们重新打包您的应用程序有一个基本的防御。这种方法不会保护您免受聪明的攻击者的攻击,但它可能会为您的目的提高足够高的标准。

此外,无论您做什么,请务必正确验证您的服务器的SSL 证书。如果您不这样做,攻击者只会通过代理服务器运行您的连接。

【讨论】:

  • 您好,谢谢您的回答。这很有帮助。不幸的是,我已经假设没有办法在 apk 中隐藏 ftp 密码。我正在考虑的是在App和FTP之间添加一个PHP接口。 PHP 将接受所有上传,但它只会将那些经过验证、已支付购买 Google IN-APP-purchase id 的内容转发给 FTP。您如何看待这种方法?
  • 在将上传内容放入永久存储之前对其进行验证似乎是一个健康的想法。
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2011-01-09
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多