繁体   English   中英

防止不受信任的客户端使用 REST API 的登录/注册端点

[英]Prevent untrusted clients to use login/register endpoints of REST API

I have actually one SPA in ReactJs + one mobile application in Flutter + one REST API developed with SailsJs running on a separate server. 当我们使用有效信息(ID/密码)登录时,我使用由 API 发回的安全 session cookie 管理用户身份验证。

因此,所有需要对用户进行身份验证的端点都受到保护(除非还有其他我不知道的安全最佳实践?)。 每次调用受保护的端点之一都会检查 session cookie 的过期和有效性。

我真的阅读了大量关于保护 REST API 的主题和博客文章。 我的问题从来没有或几乎没有出现过。 所以现在我的主要问题是:

如何限制我的公共 API 端点(当前登录和注册)不需要用户进行身份验证(因为有用于实现此任务的端点......)仅用于我受信任的客户端应用程序(Web 和移动)?

如何防止其他人开发的另一个应用程序使用这些端点?

我不希望任何人通过我的 API 登录,除非在我正在开发的客户端应用程序中完成... ..

我看到很多使用登录 API 路由(例如 Heroku)的流行服务无法在 Postman 中使用相同的参数(403 错误代码)访问。 所以这是可能的。 但是他们是怎么做到的呢? 在专门的论坛中没有任何东西可以处理这个问题,或者我错过了一些东西!

我很难使用存储在客户端中的秘密令牌来对其进行身份验证,但它实际上是公开的,例如 web 开发人员工具。

需要一些建议。

谢谢

用户身份验证不是应用身份验证

因此,所有需要用户进行身份验证的端点都受到保护......

此端点仅受保护以识别、验证和授权请求中的,而不是针对正在执行请求的内容,是一个在开发人员中不太了解的主题,无论他们是初级还是高级。

WHO和WHAT访问API服务器的区别

在我写的一篇文章中,题为为什么您的移动应用程序需要 Api 密钥? 您可以更详细地阅读什么在访问您的 API 服务器之间的区别,我从中引用以下内容:

向 API 服务器发出请求的原因是什么 它真的是您的移动应用程序的真实实例,还是机器人、自动脚本或攻击者使用 Postman 之类的工具手动在您的 API 服务器周围探查?

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

因此,是您的 API 服务器的用户,您将能够验证和授权对数据的访问,以及代表用户发出请求的软件是什么,您的正版应用程序,被篡改的应用程序,自动脚本或者有人通过 cURL、Postman 或类似工具手动使用您的 API。

到目前为止,我希望您有足够的知识来理解为什么 user( who ) 身份验证与 app( what ) 身份验证不同。

将 API 服务器锁定到应用程序

如何限制我的公共 API 端点(当前登录和注册)不需要用户进行身份验证(因为有用于实现此任务的端点......)仅用于我受信任的客户端应用程序(Web 和移动)?

我认为,到目前为止,您可能已经清楚,不仅登录和注册端点需要保护免受请求的影响。

如何防止其他人开发的另一个应用程序使用这些端点? 我不希望任何人通过我的 API 登录,除非在我正在开发的客户端应用程序中完成... ..

这对于 web 应用程序来说是非常难以实现的,但在实施移动应用程序证明概念时,对于移动应用程序来说,这是可能的。

对于 web 应用程序

由于 web 的构建方式的性质,检查 web 应用程序所需要的只是按 F12 或检查页面源,然后搜索从另一个工具服务器访问 ZDB974238714CA8DE634A7CE1D08 所需的任何内容。

您可以学习一些有用的技术来帮助您的 API 服务器尝试仅响应来自期望的请求,您的正版 web 应用程序,为此我邀请您阅读来自呼叫的安全 Z8A5DA52ED126447D359E70C0A8A 数据的问题的回答该应用程序,特别是专门用于保护 API 服务器的部分。

对于移动应用

要了解如何将 API 服务器锁定到您的移动应用程序,我建议您阅读如何保护移动应用程序的 API REST 问题的回答? 有关保护 API 服务器可能更好的解决方案的部分。

要保护的端点

因此,所有需要对用户进行身份验证的端点都受到保护(除非还有其他我不知道的安全最佳实践?)。

如果您只想增强登录和注册端点的安全性,这取决于您,但我的建议是增强所有这些端点的安全性,以检测访问它们的内容。

POSTMAN 与 HEROKU 等

我看到很多使用登录 API 路由(例如 Heroku)的流行服务无法在 Postman 中使用相同的参数(403 错误代码)访问。 所以这是可能的。 但是他们是怎么做到的呢? 在专门的论坛中没有任何东西可以处理这个问题,或者我错过了一些东西!

I never used Heroku, but when I am using an API that doesn't work in Postman, but works in other clients, let's say from cURL, then I disable Postman from sending it's own user-agent and normally the API will start accepting the要求。

如果没有,那么他们可能正在做设备指纹识别

设备指纹或机器指纹是为识别目的而收集的有关远程计算设备的软件和硬件的信息。 通常使用指纹算法将信息同化为简短的标识符。 浏览器指纹是通过与设备的web浏览器交互而专门收集的信息。

指纹可以在主动或被动模式下完成。 在主动模式下,一些 Javascript 在客户端上运行以收集一些数据以发送回 API 服务器,而在被动模式下,它使用服务器中请求的可用信息,例如 Z80791B3AE7002CB88C246876D9FAA8F 标头和请求参数。

虽然提高了伪造请求的标准,但可以通过观察受信任的客户端如何发送请求并模仿它来绕过它。 对于攻击者来说,枚举所有变体然后自动化它们只是多一点工作。

您想要额外的里程吗?

我真的阅读了大量关于保护 REST API 的主题和博客文章。

首先,我祝贺您付出了如此多的努力来教育自己保护您的 API。

我不知道您是否已经阅读了我将要链接的一些 OWASP 资源,但是在任何对安全问题的回答中,我总是喜欢参考 OWASP 基金会的出色工作;)

对于 Web 应用程序

OWASP Web 十大风险

OWASP Top 10 是一个强大的 web 应用程序安全意识文档。 它代表了对 web 应用程序最关键的安全风险的广泛共识。 项目成员包括来自世界各地的各种安全专家,他们分享了他们的专业知识来制作此列表。

Web 安全测试指南

OWASP Web 安全测试指南包括用户可以在自己的组织中实施的“最佳实践”渗透测试框架和描述测试最常见 web 应用程序和 Z2567A5EC973E07AC2DZZ98408 服务安全问题的技术的“低级”渗透测试指南。

对于移动应用

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

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

OWASP - 移动安全测试指南

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

对于 APIS

OWASP API 安全前 10 名

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM