首页 > 解决方案 > 如何保护仅服务于我的前端的自己的后端 API?

问题描述

我正在设置一个带有前端和后端的 webapp,该后端通过 RESTful 方法与前端单独通信。如何确保后端端点只能由我自己的前端访问,而不是其他任何人?我找不到太多这方面的信息。

标签: pythonsecurityfalconframework

解决方案


如何确保后端端点只能由我自己的前端访问,而不是其他任何人?

让我在这里告诉你一个残酷的事实......对于网络应用程序来说是不可能的,因为网络是如何设计工作的。

让我们通过了解访问 API 服务器的WHOWHAT之间的区别以及为什么不存在私有 API来尝试更深入地了解这个问题。

谁和什么在访问 API 服务器

WHO是 Web 应用程序的用户,您可以通过多种方式进行身份验证、授权和识别,例如使用 OAUTH 流和/或 OpenID 。

认证

通常,OAuth 代表资源所有者向客户端提供对服务器资源的“安全委托访问”。它指定了资源所有者授权第三方访问其服务器资源而不共享其凭据的过程。OAuth 专为与超文本传输​​协议 (HTTP) 一起使用而设计,本质上允许授权服务器在资源所有者的批准下将访问令牌颁发给第三方客户端。然后第三方使用访问令牌访问资源服务器托管的受保护资源。

开放ID

OpenID Connect 1.0 是 OAuth 2.0 协议之上的简单身份层。它允许客户端根据授权服务器执行的身份验证验证最终用户的身份,并以可互操作和类似 REST 的方式获取有关最终​​用户的基本配置文件信息。

现在您需要一种方法来识别是什么在调用您的 API 服务器,而这里的事情变得比大多数开发人员想象的要复杂得多。向 API 服务器发出请求的内容是什么,它真的是您真正的 Web 应用程序还是机器人、自动脚本或攻击者使用 Postman 之类的工具手动绕过您的 API 服务器?

开发人员倾向于求助于 API 密钥,这些密钥通常在标头中发送,在 cookie 中或隐藏在其 Web 应用程序的 javascript 代码中,有些人会加倍努力并在网络运行时计算应用程序因此成为动态秘密,与前一种方法相反,后者是嵌入在代码或标头中的静态秘密。

私有 API

无论 API 是否没有可公开访问的文档,或者是否受到任何类型的机密或身份验证机制的保护,一旦可从 Internet 访问就不再是私有的,因此任何知道它所在位置的人都可以访问并且枚举每个端点很容易,就像使用开发工具中的网络选项卡一样。

可能的解决方案

任何在客户端运行并且需要一些秘密来访问 API 的东西都可能以不同的方式被滥用,您可以在 本系列关于移动 API 安全技术的文章中了解更多信息。虽然本文是在移动应用程序的上下文中完成的,但它们仍然与 Web 应用程序共享通用技术。他们将教您如何使用 API 密钥、用户访问令牌、HMAC 和 TLS 固定来保护 API,以及如何绕过它们。

您的 Javascript 代码可能会通过混淆变得难以理解,这将使逆向工程变得困难,但请记住并非不可能,因此不要依赖它来隐藏敏感数据,而只是作为另一层难以理解了解发生了什么。

您可能还想看看 Google 的reCaptcha V3,它将允许在不需要用户交互的情况下将真实用户与自动脚本区分开来。您需要将其添加到 Web 应用程序的每个页面。

验证码 V3

reCAPTCHA 是一项免费服务,可保护您的网站免受垃圾邮件和滥用。reCAPTCHA 使用高级风险分析引擎和自适应挑战来防止自动化软件参与您网站上的滥用活动。它在让您的有效用户轻松通过的同时做到这一点。

另一种更复杂的方法是使用用户行为分析 (UBA) 工具,该工具在后端使用机器学习和人工智能来防止 API 滥用,但它们无法 100% 阻止它。

要解决什么是访问您的 API 服务器的问题,您需要使用关于移动 API 安全技术、reCaptcha V3 和 UBA 解决方案的系列文章中提到的一个或所有解决方案,并接受它们只能对您的 API 进行未经授权的访问服务器更难绕过但并非不可能。

概括

因此,您可以使查找和访问您的 API 变得困难,但要将其真正锁定到您的 Web 应用程序中,您却不能。


推荐阅读