我想创建一个收集信息然后上传到服务器的Android应用程序 - 但是我不希望人们在将文件发送到服务器之前能够编辑该文件。我可以做第一部分,但我无法完成第二部分。谁能告诉我最好的方法呢?我不介意用户是否知道文件中的内容,只是不希望他们编辑它,然后将他们编辑的信息上传到服务器。
答案 0 :(得分:6)
由于应用程序由用户运行并且输出由用户控制,因此您运气不佳。你可以接管用户系统以便他无法控制它的唯一方法就是使用trusted computing来解决所有的道德和哲学问题 - 比如说。 Richard Stallman Can You Trust Your Computer?。您唯一可以希望的是在服务器和用户系统(SSL / TLS)之间建立安全连接,但这仍然是您无法控制的用户系统。
答案 1 :(得分:4)
这里唯一正确的答案是Zed's。
其余答案依赖于Security through obscurity。
底线是:如果设备未完全锁定(=可信计算),则用户可以对应用程序/文件格式/网络协议进行逆向工程并提交错误数据。
生活中的事实:拥有巨大资源的人(媒体行业,IT行业)已经试图将其拉下来(DVD,BluRay,游戏机等等)但最终有才能的最低预算的工程师已经能够打破这种保护方案
所以,它可能会起作用,但只有在数据不重要且没有人愿意打破它的时候。
答案 2 :(得分:1)
一些粗略的想法:
您可以查看正在向用户发送到服务器的信息,然后事先用密码压缩正在发送的文件,这样用户就没有机会对其进行编辑:
Write a password protected Zip file in Java
当然,您必须确保用户不知道密码......
或者您可以构建已发送文本的校验和,并验证服务器上的校验和。在这里,您必须再次确保用户不知道如何构建校验和并相应地更改它。
或者您无法将信息安全地保存到文件中,而是保存到应用程序的数据库或私有文件空间(非root用户无法访问它)。
无论是密码还是校验和,您都可以使用正常的HTTP请求将该信息发送到您的服务器,这样它就不会对用户“可见”(后面是实际发送文件的第二个请求),但是如果我们谈论的是那些知道如何在手机上处理网络嗅探器的用户(需要root,AFAIK),你就会运气不好,这是他们的设备和他们试图完全离开它的数据:)您可以尝试使用安全连接来解决此问题。
答案 3 :(得分:1)
您可以使用以下几种方法:
取决于此信息对确定使用哪种方法组合的敏感程度。
答案 4 :(得分:1)
对于Android而言,您无法阻止人们访问公共文件系统上的文件。
也许有更好的方法可以解决这个问题,但我会在提交之前简单地加密和解密数据,并使用密码或某种奇偶校验来验证数据。
答案 5 :(得分:1)
你能做什么:
这会有所帮助,但您仍然会将私钥与您的应用程序捆绑在一起......有人可能会找到它然后签署已修改的文件......
另一个想法:您可以计算数据还是用户生成的数据?如果计算了为什么不计算数据并将其发送到服务器(通过SSL),甚至不将其写入文件系统?