2011-02-28 51 views
3

我想要创建一个收集信息然后上传到服务器的android应用程序 - 但是我不希望人们在发送到服务器之前能够编辑该文件。我可以做它的第一部分,但不能做第二部分。任何人都可以告诉我有关这方面的最佳方法吗?我不介意用户是否知道文件中的内容,只是不希望他们编辑它,然后将编辑的信息上传到服务器。如何确保文件从电话到服务器不被篡改?

回答

6

由于应用程序由用户运行并且输出由用户控制,因此您几乎不走运。你可以接管用户系统的唯一方式,以至于他无法控制它,将会使用trusted computing以及所有的道德和哲学含义 - 例如见。 Richard Stallman的Can You Trust Your Computer?。唯一可以希望的是在服务器和用户系统(SSL/TLS)之间建立安全连接,但这仍然是您无法控制的系统的用户的系统。

1

一些粗略的想法:

,您可以查看正在被发送到服务器给用户的信息,然后ZIP多数民众赞成正在用密码发送文件事先所以用户不会得到一个机会来编辑它:

Write a password protected Zip file in Java

当然,你必须确保用户不知道密码...

或者你可以构建符合发送的文本的校验和验证校验和e服务器。在这里,你必须确保用户不知道如何构建校验和并相应地改变它。

或者,您无法将信息安全地保存到文件中,除非进入应用程序的数据库或私有文件空间(非root用户无法访问它)。

无论是密码还是校验和,您都可以使用正常的HTTP请求将该信息发送到服务器,以便用户不会看到该信息(随后是实际发送文件的第二个请求) ,但如果我们谈论的是知道如何处理他们手机中的网络嗅探器的用户(需要root,AFAIK),那么运气不好,这是他们的设备和他们的数据,毕竟它试图离开它:)
你可以尝试使用安全连接来解决这个问题。

+0

不起作用。用户可以对应用程序进行反向工程并获取密码,而不是生成他们自己的编辑后的zip文件。 – 2011-02-28 14:33:04

1

有一对夫妇的方法,你可以在这里使用:

  1. 加密,然后将文件保存它的设备,用户将无法读取/修改。
  2. 加密到服务器的连接,SSL可以防止第三方干扰它。
  3. 不要将文件保存在公共位置,请将其放在应用程序的专用数据目录中。用户将无法访问它。

取决于这些信息将决定使用哪种方法的组合。

1

至于Android,您无法阻止人们访问公共文件系统上的文件。

也许有更好的方法来处理这个问题,但我会在提交之前简单地对数据进行加密和解密,并使用密码或某种奇偶校验来验证数据。

1

你可以做什么:

  • 注册文件与应用程序
  • 检查服务器上的签名,检查证书是否被授权

这将有助于证书有点,但你仍然有私钥与你的应用程序捆绑...有人可能能够找到它,然后签署修改后的文件...

另一个想法:你可以计算数据还是用户生成?如果计算出来,为什么不计算数据并将其发送到服务器(通过SSL),甚至无需将其写入文件系统?

4

这里唯一正确的答案是Zed's。

答案的其余部分依赖于Security through obscurity。底线是:如果设备没有完全锁定(=可信计算),那么用户可以逆向设计应用程序/文件格式/网络协议并提交错误数据。 (DVD,BluRay,游戏机等等),但最终有能力的工程师在最低预算的情况下能够打破这种情况保护计划。

所以,它可能工作,但只有当数据不重要,没有人打扰它打破它。

相关问题