如何保护与 Android 应用程序交互的 PHP JSON api 端点?
Posted
技术标签:
【中文标题】如何保护与 Android 应用程序交互的 PHP JSON api 端点?【英文标题】:How to secure PHP JSON api endpoint interacting with an android app? 【发布时间】:2020-05-29 12:19:53 【问题描述】:如果应用程序通过 https 使用 post 方法(JSON 对象)与服务器 api 交互,则存在暴露 api 端点和任何人访问 api 的危险。 有没有办法确保从指定的应用程序仅调用 api。
我在网上做了一些研究并了解到:
一个。使用 POST 方法进行手动凭据检查
b.使用 json 网络令牌 (jwt)
但是我的问题是:这两种方法 a) 和 b) 都需要某种用户名/密码从客户端应用程序传递到服务器(在 a. 中每次都在 b. 中)。现在这个用户名/密码需要在 apk 中硬编码,任何人都可以通过反编译轻松获得它。那么这些方法如何安全呢?
【问题讨论】:
它不应该在 APK 中。您应该创建一个 API 来存储凭据,并为每个用户创建一个唯一的令牌。如果要添加另一层安全性,可以使用盐密钥并对其进行检查。请看here。 谢谢卡杜。我们在哪里存储每个用户的唯一令牌?用户无需登录/注册。他们只需安装应用程序并开始使用它。 那么,你需要实现一个数据库来存储这些信息,或者使用像 Firebase 这样的 API。 【参考方案1】:我认为您误解了 json 网络令牌或不记名令牌的工作原理。为什么用户名和密码需要硬编码?您将为用户提供一个接受用户名和密码的界面。
在选项 a 中,您可以在用户提供凭据后将其存储在本地,并在他们退出应用程序或注销时将其清除。不建议这样做,因为这就是令牌的用途。许多框架已经为 JWT 提供了开箱即用的支持。
如果使用令牌,用户仍然提供他们的用户名和密码进行身份验证,服务器将返回一个有效的授权令牌。从那时起,每个请求都会传递身份验证令牌。
【讨论】:
好的。我认为您假设我们为每个用户都有唯一的密码。不是这种情况。用户无需登录即可使用该应用程序。它只是工作。我现在已经意识到,在这种情况下,它永远不可能 100% 安全,我们可以通过硬编码和从客户端应用程序向服务器提供凭据来让黑客有点困难【参考方案2】:我会以某种方式使用 TLS 安全性……与数字证书……以加密方式保护对门户的网络访问。该应用程序将包含必要的公共证书,可能是经过混淆的,服务器可以检查该证书以确保访问是合法的。现在,没有人可以拦截通信,而且如果不先从应用程序中提取证书信息,他们就无法进行欺骗,这可能不太可能。知道请求者确实拥有必要公钥的副本应该是足够的身份验证。
虽然我们在使用 TLS 到达您的友好社区 https
网站时通常不使用它,但像 mod_ssl
这样的模块 do 提供了完整的 TLS 实现,包括能够要求并验证 客户端 安全证书,如果没有该证书,连接尝试将被拒绝。这可能是一个理想的情况。
【讨论】:
以上是关于如何保护与 Android 应用程序交互的 PHP JSON api 端点?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 php 为 Android 和 Ios 集成视频加密和解密?