我正在构建我的第一个应用程序,其中包括对数据库的访问和对服务器的连接。我设置的是用户将他们的凭据输入到应用程序,然后将其发送到服务器。服务器检查这些凭据是否正确。如果是,服务器将加密的API密钥发送到应用程序,应用程序自己使用数据库API。密钥不会保存,仅在应用程序运行时使用。
我认为更安全的是,尽管设计起来要慢得多,也更痛苦,要求应用程序向服务器(持有API连接的服务器)发送查询和命令,服务器将结果转发给客户端(应用程序)。
我说得对吗?如果没有,我应该使用后一种策略,还是其他策略?
第三方API访问
。。。服务器向应用程序发送加密的API密钥,并且应用程序单独使用数据库API。密钥不会保存,仅在应用程序运行时使用。
我认为更安全的是,虽然设计起来要慢得多,也更痛苦,但需要应用程序向服务器(持有API连接的服务器)发送查询和命令,服务器将结果中继到客户端(应用程序)。
是。不直接访问数据库API要安全得多,因为这是第三方服务,您无法控制它,因此您无法采取防御措施来确保数据库API密钥不会被滥用,但如果查询通过您可以控制的后端,您可以。
我说得对吗?
否。在我看来,移动应用程序永远不应该直接访问第三方服务,因为攻击者可以在运行时使用工具框架钩住移动应用程序的代码,该代码使用API密钥访问数据库,并将其提取出来,以便日后在其自己的自动攻击中使用。实现这一点的一个流行的工具框架是Frida:
将您自己的脚本注入黑盒进程。挂钩任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都没有编译步骤或程序重新启动。
你能想象攻击者在你没有意识到或操纵数据库中的数据的情况下提取数据库中的所有数据是多么容易吗?
反向代理
如果没有,我应该使用后一种策略,还是其他策略?
您应该使用您完全控制的后端或反向代理来访问第三方服务,您可以在我的文章《使用反向代理保护第三方API:》中阅读更多信息
在本文中,您将首先了解什么是第三方API,以及为什么不应该直接从移动应用程序中访问它们。接下来,您将了解什么是反向代理,以及何时以及为什么应该使用它来保护对移动应用程序中使用的第三方API的访问。
现在您可能会说您刚刚将API关键问题转移到了反向代理,这是正确的,但正如我在文章中所解释的,您现在可以控制降低使用数据库的风险,因此您可以应用您认为合适和/或负担得起的尽可能多的防御措施。
保护反向代理例如,您可以使用UBA-用户行为分析:
Gartner定义的用户行为分析(UBA)是一个关于检测内部威胁、定向攻击和金融欺诈的网络安全过程。UBA解决方案着眼于人类行为模式,然后应用算法和统计分析从这些模式中检测出有意义的异常——表明潜在威胁的异常。UBA不是跟踪设备或安全事件,而是跟踪系统的用户。像Apache Hadoop这样的大数据平台正在增加UBA的功能,允许它们分析价值PB的数据,以检测内部威胁和高级持久威胁。
UBA基于负面识别模型工作,换句话说,他们尽最大努力通过识别什么是坏的,而不是什么是好的来区分坏的和好的,因此他们很容易出现误报,尽管他们中的一些人使用了先进的技术,如机器学习和人工智能。
因此,为了不影响好的用户,你可能会发现自己经常不得不放松阻止对API服务器的访问。这也意味着,这需要不断的监控,以验证误报没有阻止合法用户,同时他们正确地阻止了未经授权的用户。
关于为移动应用程序提供服务的API,可以通过实现移动应用程序验证解决方案来使用积极的识别模型,该解决方案在向API服务器发出任何请求之前验证移动应用程序及其运行的设备的完整性,我建议您阅读我对问题如何确保移动应用程序的API REST的安全,了解更多关于这个概念的信息。
你想多跑一英里吗
在回答安全问题时,我总是喜欢引用OWASP基金会的出色工作。
对于APIS
OWASP API安全前10名
OWASP API安全项目旨在通过强调不安全API中的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API安全项目将创建并维护API十大安全风险文档,以及创建或评估API时最佳实践的文档门户。
适用于移动应用程序
OWASP移动安全项目-十大风险
OWASP移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。
OWASP-移动安全测试指南:
《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。
如果是,服务器将加密的API密钥发送到应用程序,应用程序自己使用数据库API。密钥不会保存,仅在应用程序运行时使用。
让任何客户端直接访问数据/数据库层被认为是不安全的做法。您无法阻止客户端执行未经授权的操作或强制执行业务数据的一致性。发送查询和命令只是在扩展问题。
我认为更安全的是,尽管设计起来要慢得多,也更痛苦,需要应用程序向服务发送查询和命令
常见的方法是使用API。这意味着将必要的操作公开为细粒度服务。您可以公开服务,这些服务验证用户身份验证并确保适当的授权以及数据的完整性和一致性。API还可以将客户端应用程序与数据库层解耦。