保护公共API



仔细阅读后发现,试图保护可公开访问的API(不需要用户登录的应用程序/网站使用的API)似乎毫无结果,例如将密钥存储在应用程序中,用户可以对应用程序进行逆向工程。

我的问题涉及如何尽可能地保护和减缓滥用公众可访问的API。。。

限速?检查请求来源(尽管可能被欺骗)。。。。还有别的吗?

此外,如果该网站是SSR,它会受到服务器IP的保护吗?

您的问题

阅读后,试图保护可公开访问的API(不需要用户登录的应用程序/网站使用的API)似乎是徒劳的,例如将密钥存储在应用程序中,用户可以对应用程序进行逆向工程。

安全是关于深度防御的,因此是关于添加尽可能多的层,并根据法律要求来降低风险,因此,您添加的任何防御都是阻止简单/愚蠢的自动化脚本访问它的又一层,同时将提高黑客突破所有防御所需的技能和努力水平。

利率限制?

这对于任何API来说都是强制性的,否则自动化脚本可以在几秒钟内轻松提取大量数据。此速率限制应用得越严格,其他防御层检测到可能发生对API的未经授权访问并试图减轻/阻止访问的机会就越大。请记住,可以通过调整攻击以发出不触发攻击的请求来绕过速率限制,并且在某些情况下对于在响应报头中返回正在应用的节流值的软件来说容易地自动化。

检查请求来源(尽管可能被欺骗)。。。。

是的,它很容易被绕过,但为什么不呢?这将是过滤掉一些愚蠢的自动化脚本/机器人的又一层防御。

如果网站是SSR,它会受到服务器IP的保护吗?

无论是SSR网站还是任何其他类型的应用程序,当从手机上使用时,IP地址都可能在页面或移动应用程序屏幕的加载过程中发生变化,因为当手机在主机之间切换时,IP会发生变化。还要记住,在办公室或公共wifi中,它上的所有用户都将拥有相同的IP。

将其单独用作阻止措施需要仔细评估,通常需要对请求进行指纹识别,以降低阻止共享同一网络的其他有效用户的风险。

只有当我能够确定他们是已知的坏IP,你可以从自己的请求历史记录和/或公共数据集中收集时,我才会非常小心地使用它来避免/阻止/节流请求。

请求中的世界卫生组织与提出请求的人

对于任何资历的开发人员来说,一个常见的误解是没有意识到请求中的人员与提出请求的人员不同,因此我们将首先澄清。。。

访问API服务器的世界卫生组织和什么不同

虽然API未使用用户身份验证,但重要的是要意识到这一区别,以便更好地围绕API服务器中要采用的安全措施做出明智的决策。

我写了一系列关于API和移动安全的文章,在文章中,为什么你的移动应用程序需要API密钥?您可以更详细地阅读什么访问您的API服务器之间的区别,但我将在这里引用它的主要内容:

what是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是机器人程序、自动脚本或攻击者用Postman这样的工具手动在你的API服务器上戳来戳去?

谁是移动应用程序的用户,我们可以通过多种方式对其进行身份验证、授权和识别,例如使用OpenID Connect或OAUTH2流。

记住差异的最佳方法是考虑作为用户您的API服务器将能够对数据进行身份验证和授权访问,并考虑what是代表用户发出请求的软件。

防御API服务器

我的问题涉及如何尽可能多地保护和减缓滥用公共可访问的API。。。

用于移动API

对于仅为移动应用程序提供服务的API,您可以使用移动应用程序验证概念,正如我在回答如何确保移动应用程序的API REST

对于Web应用程序

对于只为Web应用程序提供服务的API,我建议您阅读我对以下问题的回答:从应用程序外调用的安全API数据

你想多走一步吗

还有别的吗?

您似乎已经做了一些研究,但可能还不知道OWASP指南和最高风险。

对于Web应用程序

网络安全测试指南:

OWASP Web安全测试指南包括一个";最佳实践";用户可以在他们自己的组织中实现的渗透测试框架;低电平";渗透测试指南,描述了测试最常见的web应用程序和web服务安全问题的技术。

适用于移动应用程序

OWASP移动安全项目-十大风险

OWASP移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。

OWASP-移动安全测试指南:

《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。

对于APIS

OWASP API安全前10名

OWASP API安全项目旨在通过强调不安全API中的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API安全项目将创建并维护API十大安全风险文档,以及创建或评估API时最佳实践的文档门户。

只是为了快速回答

我可以建议至少一种解决方案,即使用API网关(如Kong、Express网关或AWS API网关等)

API网关允许您创建API消费者(例如:买方移动应用程序、卖方移动应用程序和买方电视应用程序)。对于每个API使用者,将分别生成一个身份验证密钥(甚至OAuth 2.0凭据)并对其进行签名。

然后,您可以使用auth密钥或OAuth 2.0凭据(ID和secret)安全地访问API(即使对于公共API也是如此,因为API网关只允许来自有效的API消费者的访问)。

网上请求怎么样

您可以配置API网关来检测来自web的请求,而不是使用auth-key或Oauth机制,它可以使用域白名单CORS保护机制。

用户访问令牌(成功登录后生成)如何?这里有冲突吗

IMHO(强调),在获得用户访问令牌(例如:JWT)后,对于每个经过身份验证的仅限用户的请求,您将发送API网关身份验证密钥令牌和用户身份验证访问令牌。参考Exadra上面的回答,我们可以考虑API网关的密钥是验证;什么";(移动应用程序),而用户访问令牌是为了验证";谁";(登录用户)。

相关内容

  • 没有找到相关文章

最新更新