我有一个Android应用程序需要与PHP页面连接才能将敏感数据添加到将影响应用程序的数据库。人们可以简单地找到数据发送到的URL并对其进行操作。
我考虑过基于IMEI创建注册,但仍然可以将其用于恶意目的。
我也检查了OAuth,我真的不明白它是如何工作的,以及它是否可以帮助我。 我可以做些什么来完全保护我的申请? 提前谢谢!
编辑: 顺便说一句,我在这里主要想要实现的是确保请求是从Android而不是从任何其他设备发送的。
答案 0 :(得分:1)
我正在尝试确保我的应用程序是发送数据而不是用户自己的应用程序,因为我的应用程序基于“生成”数据,如果可以操作它,将导致我的应用程序无法正常工作(除非我亲自检查插入数据库的每一个数据)。
永远不会有一种确定的方式来100%确定发件人的身份。基本原则是“永远不要相信客户”;你必须假设来自外部的任何信息都可以伪造。一般来说,您的应用程序应该能够接受任何类型的请求而不会出现故障,验证数据并拒绝任何乱序。最终,这可以阻止一直试图发送操纵数据的发件人。
尝试确保发件人而不是保护接收服务器不是一个好习惯,并且总是让您容易受到攻击。
要问的问题会更有成效,您的应用是否无法自动验证传入的数据,而不是像您在评论中所说的那样亲自验证?如果您提供有关您的应用正在做什么的更多详细信息,社区可以帮助您解决这个问题。
答案 1 :(得分:1)
您正在描述数字签名流程的典型方案。如果您熟悉非对称加密,则应为您的Android应用程序分配私钥,并且您的php服务器应具有相应的公钥。
当Android应用程序发送HTTP请求时,它应生成数字签名。这通常是在使用私钥加密请求之前为请求生成摘要。当服务器收到请求时,它应该使用公钥来检索摘要。它还应该自己生成一个摘要值(使用与Android应用程序相同的逻辑)并比较这两个值。
问题是如何使私有密钥可以访问Android客户端。如果入侵者设法仍然使用此密钥,那么他将能够冒充客户端。一种方法是“隐藏”源代码中的密钥,以一种使逆向工程变得困难的方式(这是一门艺术)。必须可以使这些密钥无效,这样如果它们被泄露,可以使用新密钥。