作为API和移动安全的开发者倡导者,看到一个真正关心他们应用程序安全的开发者总是让我感到高兴,特别是当他们已经做出了一些努力来保护它时,因此请接受我的祝贺。
我的回答背景
我正在构建一个应用程序,在其中需要在客户端前端应用程序中向外部API发出请求,但我有点不知道如何使其最大程度地安全,以便只有有效的请求可以转发到该外部API,而不是任何人想要的东西。
所以,您没有详细说明这是一个Web应用程序还是移动应用程序,由于我的专业知识依赖于移动和API安全,因此我将假设这是一个移动应用程序。
挑战
问题是这是一个在线餐厅订购服务,因此我们不希望用户必须通过用户名和密码进行身份验证才能下订单,因此触发外部API调用的订单放置没有被任何用户名/密码方案所限制,并且必须对前端应用程序的所有消费者开放。
您面临着一个复杂的挑战,因为您有一个向公众开放的应用程序,没有任何用户身份验证/识别,但需要访问底层资源的访问规则,就像它在用户身份验证和授权后面一样,但即使是这样,它仍然容易被滥用。
要理解为什么我需要澄清通常在任何资深开发人员中都会发现的误解,即关于谁和什么正在访问API服务器之间的区别。
我撰写了一系列关于API和移动安全性的文章,在文章
Why Does Your Mobile App Need An Api Key?中,您可以详细阅读谁和什么正在访问您的API服务器之间的区别,但我将从中提取主要内容。
什么是向API服务器发出请求的东西。它是您移动应用程序的真正实例,还是机器人、自动化脚本或攻击者手动使用像Postman这样的工具探测您的API服务器?
谁是我们可以通过多种方式进行身份验证、授权和识别的移动应用程序用户,例如使用OpenID Connect或OAUTH2流程。
将谁视为您的API服务器将能够对数据进行身份验证和授权访问的用户,并将什么视为代表用户发出请求的软件。
因此,在您的情况下,您无法确定请求中的谁,因此您需要一个解决方案,该解决方案能够向API后端提供非常高的信心,即请求确实来自它所期望的什么,即您应用程序的真实未修改实例。
可能的解决方案
我正在构建一个应用程序,在客户端前端应用程序中需要向外部API发出请求,但我不知道如何使其最大程度地安全,以便只有有效的请求可以转发到此外部API,而不是任何人想要的东西。
这需要非常先进的解决方案才能得到适当的保护,因此并不像您可能认为的那样容易实现:
我确定我一定只是错过了一些微不足道的东西,因为这必须是一个非常普遍的问题,具有已建立的最佳实践,但我某种方式未能找到它。
是的,这是一个常见的问题,通常被忽视或未能得到适当解决,解决它的第一步是清楚地了解请求中“谁”与“什么”的区别,否则设计的解决方案将无法正确解决该问题。
对于移动应用程序:
我建议您阅读我对“如何保护移动应用的REST API?”问题给出的
答案,特别是“加强和保护移动应用程序”、“保护API服务器”和“可能更好的解决方案”部分。
这个答案将向您展示几种解决方案,例如WAF和UBA,但最终推荐使用移动应用程序认证概念。
简而言之,移动应用认证将允许API后端有很高的信心,确保请求确实来自于它所期望的、真实且被修改的移动应用程序实例。
对于Web应用程序
您可以学习一些有用的技术,帮助您的API后端仅响应来自您期望的真实Web应用程序的请求。为此,我邀请您阅读
我的回答,了解如何保护API服务器的相关部分。
您想更进一步吗?
在回答安全问题时,我总是喜欢引用OWASP基金会的优秀工作。
针对APIs
OWASP API安全前10名
OWASP API安全项目旨在通过强调不安全API中的潜在风险,并说明如何缓解这些风险,为软件开发人员和安全评估人员提供价值。为了实现这个目标,OWASP API Security Project将创建和维护一个前10个API安全风险文档,以及一个最佳实践文档门户,用于创建或评估API。
针对移动应用程序
OWASP 移动安全项目 - 前 10 大风险
OWASP 移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控件以减少它们的影响或被利用的可能性。
OWASP - 移动安全测试指南:
移动安全测试指南 (MSTG) 是一本全面的手册,用于移动应用程序安全开发、测试和反向工程。
针对 Web 应用程序
Web 安全测试指南:
OWASP Web 安全测试指南包括一个“最佳实践”渗透测试框架,用户可以在自己的组织中实施,并提供了一个“低级别”渗透测试指南,描述了测试最常见的 Web 应用程序和 Web 服务安全问题的技术。