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