【发布时间】:2020-08-25 19:43:53
【问题描述】:
我的移动应用使用基于 HTTP 的 API,其端点不难发现,例如 https://<domain>/api/config 或 https://<domain>/api/login。
因此有人可以在应用程序中创建一个帐户,然后使用某些请求发出桌面应用程序(“流氓客户端”)中的凭据向/api/login 发送请求,然后在使用我的不记名身份验证方案“登录”之后,继续到其他端点查看从那里发送的数据。
此类尝试可能会让人们窥探有关其他用户的一些敏感数据,这些数据只能由应用程序内部访问。
在保证从我的后端 API 发送的任何数据只能由应用访问的过程中,有什么既定方法可以提高我的应用的安全性?
专门针对 iOS 应用,是否有任何框架可以实现这一点?
我的后端是 Nginx 和 Django。
【问题讨论】:
-
@GaborLengyel 不。
-
您只能使流氓客户端的开发更加困难,但完全防止这种情况是不可能的。目前,这样做的一种方法是使用带有服务器证书固定的 HTTPS、强制 HTTPS 客户端身份验证(证书+私钥必须在应用程序中得到很好的保护)以及具有反调试、反包括 Frida 和许多其他反逆向工程。
-
@Robert 谢谢。关于
use HTTPS with server certificate pinning,SSL pinning 不是旨在确保客户端与真正的服务器后端而不是冒名顶替的服务器交谈吗?我的问题更多的是关于相反的情况:确保后端正在与正版应用程序对话。关于forced HTTPS client authentication,我不确定你的意思。 -
@DesmondHume 要了解通信有两种方法:反转应用程序(离线)并了解它使用哪些 API 或通过例如重定向应用程序和服务器之间的流量。 mitmproxy 让你直接看到所有的通信。使用证书固定攻击者首先必须打破这一点,然后才能访问传输的数据。
HTTPS cert based client auth:这是 HTTPS 的可选功能,可以由服务器强制执行。在这种情况下,如果客户端没有正确的证书+私钥,则无法建立 HTTPS 连接。