如何在APK中保护SFTP密码?

时间:2014-09-19 20:57:54

标签: java android security sftp credentials

我正在开发一款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服务器。

由于

1 个答案:

答案 0 :(得分:8)

  

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

所述问题无法解决。

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

如果您只从这个答案中选择一件事,那就是为您的服务器设置一个静态密码是非常有问题的,因为您永远无法更改密码服务器 - 因为你打破了所有的应用程序。您的密码是公共知识将是一个时间问题,您将无法做任何事情。

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

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

如果您绝对坚持零用户互动,那么可能(某种程度上)有效的方法是让应用注册Google Cloud Messaging,然后向其发送包含访问凭据的推送通知,应用将存储在KeyChain中。如果为每个应用程序安装生成唯一的用户ID和密码,您将能够监视服务器并阻止任何滥用访问凭据,而不会影响任何其他用户。如果您以某种方式将APK的代码签名身份纳入流程,您将对人们重新打包您的应用程序进行基本防御。这种方法不会保护您免受智能攻击者的攻击,但它可能会为您的目的提高标准。

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