如何保护简单的 Node.js RESTful API

Posted

技术标签:

【中文标题】如何保护简单的 Node.js RESTful API【英文标题】:How to secure a simple Node.js RESTful API 【发布时间】:2020-08-13 20:37:42 【问题描述】:

我正在开发一个简单的新闻应用程序,用户无需登录即可查看最新消息,我不知道如何确保它的安全,我已阅读应该使用带有 OAuth2 的 JWT,但据我了解,用户必须登录进入提供程序以获取令牌,但我希望用户无需登录即可读取数据。 我现在关心的是如何防止其他人在他们的应用程序中使用我的 API,我也关心 DoS 攻击。

【问题讨论】:

【参考方案1】:

挑战

我正在开发一个简单的新闻应用程序,用户无需登录即可看到最新消息,我不知道如何使其安全

嗯,你给自己买了一个非常巨大的挑战,因为即使你要求你的用户登录,它仍然是一个巨大的挑战,因为我们知道的网络是在早期设计的,天真的假设只有好的相信人们会使用它,因此保护一些本来就不是安全的东西就成了一项非常艰巨的任务。

将 API 服务器保护并锁定到特定应用程序需要在每个请求中使用某种机密,以便验证 什么 正在执行请求,但是一旦您发布网络应用程序或移动应用程序向公众公开任何秘密现在都在公共领域,因此不再是秘密,因为最好将其用作弱标识符。

网络应用

Web 应用程序在浏览器中运行,因此攻击者需要做的就是检查页面源并提取秘密,然后在自动脚本或来自curl 或 Postman 等工具的手动请求中使用它。

移动应用

一些开发人员认为,由于移动应用程序是作为二进制文件发布的,他们可以将秘密放在那里,没有人会发现它......好吧,我不得不说过去我是其中之一,但后来我开始了解到,存在许多开源工具可以使这项任务变得微不足道,即使是脚本小子也可以做到。我首选的工具是MobSF,你可以在我写的这篇文章中看到一个使用它的例子How to Extract an API Key from a Mobile App with Static Binary Analysis:

可用于逆向工程的开源工具种类繁多,我们在本文中确实无法触及这个主题的表面,而是将重点介绍如何使用移动安全框架 (MobSF) 来演示如何对我们的移动应用程序的 APK 进行逆向工程。 MobSF 是一组开源工具,它们在一个有吸引力的仪表板中展示其结果,但在 MobSF 和其他地方使用的相同工具可以单独使用以实现相同的结果。

MobSF - Mobile Security Framework:

Mobile Security Framework 是一种自动化的一体化移动应用程序 (android/ios/Windows) 渗透测试框架,能够执行静态分析、动态分析、恶意软件分析和 Web API 测试。

要点是,一旦应用发布,其中包含的任何敏感信息都必须被视为已泄露。

JWT 和 OAUTH2

我已经读到应该使用带有 OAuth2 的 JWT,但据我了解,用户必须登录到提供程序才能获取令牌

是的,用户需要登录才能获得 OAuth 令牌,但任何类型的来自用户登录成功的令牌只会识别 在请求中,而不是 什么 正在执行请求,根据我的经验,这是开发人员中非常普遍的误解,无论他们是初级还是高级开发人员。

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

我写了一系列关于移动 API 安全的文章,在文章 Why Does Your Mobile App Need An Api Key? 中你可以详细阅读 What 发出请求的区别到您的 API 服务器:

what 是向 API 服务器发出请求的事物。它真的是您的移动应用程序的真实实例,还是机器人、自动脚本或攻击者使用 Postman 之类的工具手动绕过您的 API 服务器?

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

您可能会感到惊讶,有时甚至您的合法用户也可能会攻击您的 API 服务器,以试图从您的服务中获取利益,否则他们将无权访问。

保护和锁定应用程序的 API 服务器

但我希望用户无需登录即可读取数据。 我现在关心的是如何防止其他人在他们的应用程序中使用我的 API

要在您的应用中实现此要求,您需要找到保护和锁定 API 服务器的方法,以仅处理来自您的 Web 和移动应用的真实实例的请求。

我不得不说,对于移动应用程序,当采用移动应用程序证明概念时,可以非常自信地实现这一点,但对于网络应用程序,我们可以通过使用人工智能尽最大努力做到这一点解决方案。

要了解如何为 Web 应用程序做到这一点,请阅读 this answer 我提出的问题从应用程序的调用中保护 api 数据,特别是标题为 Defending The 的部分API 服务器.

对于移动应用程序,您应该阅读this answer 我提出的问题如何保护移动应用程序的 API REST?,更具体地说,在 保护 API 服务器部分 em> 和可能更好的解决方案部分。

如果您已经阅读了我上面链接的两个答案,您现在可能会更好地理解为什么我最初说这是一个巨大的挑战

DoS 攻击

你也担心 DoS 攻击。

这通常不会在应用程序级别解决,而是最好在基础架构级别处理,例如在防火墙中,可以应用规则来识别和丢弃 DoS 数据包,但如果它们过于严格,它们也可能会阻止合法用户,而如果他们太放松,他们会让 DoS 数据包通过。要获得更有效的 DoS 攻击防护,您需要借助专门的软件,即使是这种软件也可能需要在大规模 DoS 攻击期间进行人工干预。

因此,我的建议是,您首先向防火墙添加一些规则以丢弃 DoS 数据包,和/或如果您使用云提供商,您可能想查看他们可以在您的帐户中提供的 DoS 保护级别。例如,我知道一些 CDN 提供商确实在一定程度上免费提供 DoS 保护,因此可能值得您考虑让所有流量都通过 CDN 路由,这也带来了 CDN 的其他传统优势,也就是从最近的资产提供服务位置给您的客户。

您想加倍努力吗?

在回答安全问题时,我不会拒绝参考 OWASP 基金会的出色工作。

对于网络应用

OWASP Web Top 10 Risks

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

The Web Security Testing Guide:

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

对于移动应用

OWASP Mobile Security Project - Top 10 risks

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

OWASP - Mobile Security Testing Guide:

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

对于 APIS

OWASP API Security Top 10

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

【讨论】:

以上是关于如何保护简单的 Node.js RESTful API的主要内容,如果未能解决你的问题,请参考以下文章

如何保护移动和 AJAX 调用的 JSON RESTful API?

如何在 Node.js 中最好地创建 RESTful API [关闭]

node js可以进行restful服务调用吗

如何保护 RESTful API

Node.js 调用 restful webservice

重学Node.js 第1&2篇本地搭建Node环境并起RESTful Api服务