提问人:Mason 提问时间:6/22/2023 更新时间:6/22/2023 访问量:103
如何确保移动应用中客户端生成数据的完整性和来源?
How to Ensure Integrity and Origin of Client-Generated Data in Mobile App?
问:
我正在开发一个移动应用程序,其中一项核心功能涉及客户端向服务器发送旅行距离和旅行开始和结束时间。由于我的业务需求的性质,服务器无法独立验证这些值。
这些数据的安全性和完整性至关重要。我需要确保请求来自我的移动应用程序的合法实例(即,不是来自流氓客户端,例如应用程序的操纵版本或来自控制台的 curl 命令),并且客户端发送的数据未被篡改。
虽然我目前使用带有刷新令牌的 HTTPS 和 JWT 身份验证,但这并不能阻止恶意用户使用其 JWT 令牌从非法客户端发送虚假数据。
我考虑过使用客户端证书,但分发到移动应用程序的每个实例似乎过于复杂,并且可能无法扩展。我也知道像 Diffie-Hellman 和 HMAC 这样的技术,但它们似乎有类似的问题。
如何确保客户端生成的数据的完整性,并确认它来自我的移动应用的合法实例?是否有处理这种情况的既定最佳实践或模式?
答:
1赞
Marek Puchalski
6/22/2023
#1
在此过程中,您可以使用一些好的做法,但它们所能做的就是阻止攻击者,并且它们不能提供 100% 的安全性。你能做的最好的事情就是研究银行应用程序是如何受到保护的,因为这些应用程序的要求与你的要求相似。因此,让我们尝试列举您需要注意的内容:
- 使用 TLS 来保护通道(不费吹灰之力)。
- 在应用程序中,实现检查它是否在有根设备上运行。如果是这样,请停止处理。攻击者使用已取得 root 权限的设备来了解应用程序的运行方式。
- 将 TLS 证书固定在移动应用程序端。这将使 MitM 攻击更难执行。这样一来,了解终结点可能会更加困难。
- 对二进制文件进行模糊处理。攻击者将尝试通过尝试禁用证书固定和 root 设备检查来搜索二进制文件。这样更难。
- (可选)作为另一层防御,您还可以将一些机密放入应用程序中,并根据请求内容和 secert 计算一些 HMAC。同样,这并不能提供最终的保护,但与混淆一起,标准将更高。
评论