【发布时间】:2021-01-26 14:18:54
【问题描述】:
寻找一种方法来了解如何确保源自我的移动应用程序的请求仅由我的服务器 API 提供服务。
这是为了让来宾用户能够看到应用程序,但不会暴露数据以供 BOT 使用。
是否有 Android 或 iOS 应用程序属性可帮助创建有助于解决此问题的请求?
【问题讨论】:
寻找一种方法来了解如何确保源自我的移动应用程序的请求仅由我的服务器 API 提供服务。
这是为了让来宾用户能够看到应用程序,但不会暴露数据以供 BOT 使用。
是否有 Android 或 iOS 应用程序属性可帮助创建有助于解决此问题的请求?
【问题讨论】:
您可以在 req.仅用于验证来自您的应用的请求的参数。
通过这种方式,您可以检查服务器上的包标识符/包名称,并基于此限制用户允许/禁止 api 使用。
另一种方式是api key/token的用户。
您可以在您的服务器上创建唯一令牌/密钥并提供给移动应用程序开发人员,然后要求在每个 api 请求中发送它。
因此,当您在服务器上收到请求时,您可以在服务器上验证该 API 密钥/令牌。如果密钥/令牌无效,则不允许用户访问您的 api。
【讨论】:
寻找一种方法来了解如何确保源自我的移动应用程序的请求仅由我的服务器 API 提供服务。
正如现在所说的那样,我读它更像是您希望确保您的移动应用程序仅发送和接收来自您的 API 服务器的请求,而不是来自伪装成您的攻击者 API 服务器或来自中间人攻击的请求。如果是这种情况,那么解决方案是将证书固定添加到您的移动应用程序中,但这应该始终添加到任何移动应用程序中。
我认为您的意思是您希望确保您的 API 服务器仅响应来自您的移动应用程序的真实实例的请求。如果是这种情况,那么您希望将您的 API 服务器锁定到您的移动应用程序,您面临着巨大的挑战和多种方法可供选择。
要在您的移动应用程序中实现证书固定,我建议您阅读文章Securing HTTPS with Certificate Pinning:
为了演示如何使用证书固定来保护您的移动应用和 API 服务器之间的 https 流量,我们将使用我在上一篇文章中使用的同一 Currency Converter Demo 移动应用。
在本文中,我们将了解什么是证书固定、何时使用、如何在 Android 应用中实现它,以及它如何防止中间人攻击。
因此,本文将指导您在示例应用中实际实现证书固定,您可以在 this repo 中找到该示例应用。
我建议您阅读this answer 我提出的问题如何保护移动应用程序的 API REST?,尤其是保护 API 服务器 和 部分em>一个可能更好的解决方案。
我在你的一个 cmets 中看到了这个到另一个答案(你也应该将它添加到你的问题中):
我正在寻找一种在应用程序中创建只能在服务器上解密的加密密钥的安全方法。
您确实可以在Android Security Library 的帮助下安全地创建一个:
安全库提供与读取和写入静态数据以及密钥创建和验证相关的安全最佳实践的实现。
我在this answer 中更详细地了解了问题在 Android 中安全地存储客户端证书和密钥 (.pem),其中包含一些代码示例。
在回答安全问题时,我总是喜欢参考 OWASP 基金会的出色工作。
OWASP API 安全项目旨在通过强调不安全 API 的潜在风险并说明如何降低这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API 安全项目将创建和维护一份 API 安全风险前 10 名文档,以及一个文档门户,用于在创建或评估 API 时提供最佳实践。
OWASP Mobile Security Project - Top 10 risks
OWASP 移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类并提供开发控制以减少其影响或被利用的可能性。
OWASP - Mobile Security Testing Guide:
移动安全测试指南 (MSTG) 是移动应用安全开发、测试和逆向工程的综合手册。
【讨论】: