如何确保自己的后端API只为我的前端服务



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

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

让我在这里告诉你一个残酷的事实。。。由于自然网络是如何设计工作的。

让我们试着通过理解世界卫生组织什么之间的区别是访问您的API服务器,以及为什么私有API不存在。

世界卫生组织和什么正在访问API服务器

世界卫生组织是网络应用程序的用户,您可以通过多种方式对其进行身份验证、授权和识别,如使用OAUTH流和/或OpenID。

OAUTH

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

OpenID

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

现在您需要一种方法来识别是什么正在调用您的API服务器,在这里,事情变得比大多数开发人员想象的更棘手。什么是向API服务器发出请求的东西,它真的是您真正的web应用程序,还是机器人程序、自动脚本或攻击者使用Postman等工具手动在您的API服务器周围戳来戳去?

很好地识别WHAT开发人员倾向于使用API密钥,这些密钥通常在头部、cookie中发送,或隐藏在web应用程序的javascript代码中,有些开发人员会更进一步,在运行时在web应用程序中计算它,从而成为动态秘密,与前一种方法相反,前者是嵌入代码或头部的静态秘密。

私有API

无论API是否没有公开的可访问文档,或者是否受任何类型的秘密或身份验证机制保护,一旦可访问从互联网不再是私人的,因此任何人都可以访问知道它住在哪里,枚举每个端点就像使用网络一样简单选项卡。

可能的解决方案

任何在客户端运行并且需要一些秘密才能访问API的东西可以以不同的方式被滥用,你可以在这一系列关于移动API安全技术的文章。而这篇文章是在在移动应用程序的上下文中,它们仍然与web应用程序共享通用技术。他们将教您如何使用API密钥、用户访问令牌、HMAC和TLS Pinning用于保护API以及如何绕过它们。

您的Javascript代码可能会因为混淆而变得难以理解,这将使其难以进行反向工程,但请记住并非不可能,因此不要依赖它来隐藏敏感数据,而只能作为另一层使其更难理解正在发生的事情。

你可能还想看看谷歌的reCaptcha V3,它将允许区分真实用户来自自动化脚本,而不需要用户交互。您需要将其添加到web应用程序中的每个页面。

reCaptcha V3

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

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

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

摘要

因此,你可以很难找到和访问你的API,但要真正将其锁定到你的网络应用程序,你不能。

  1. 查看CORS。并确保您的服务器只允许访问特定的来源。

  2. 如果JS通过XMLHttpRequest而不是在后端请求数据,请检查X-Requested-With标头是否存在并设置为XMLHttpRequest。如果没有正确的CORS握手,此标头将不存在

也就是说,这只会保护您的API不被其他前端应用程序使用或直接从浏览器地址栏访问,因为浏览器尊重CORS。人们仍然可以通过编程/CLI伪造请求,并将头设置为他们想要的任何内容。

所以这实际上并不是";"固定";只是防止滥用的一种方式&热链接

最新更新