【问题标题】:How do you protect a restful api endpoint in flutter你如何在颤振中保护一个宁静的 api 端点
【发布时间】:2021-10-18 20:23:40
【问题描述】:

我有一个调用后端 API 服务器的颤振移动应用程序。这需要一个 API 密钥。我不想将密钥嵌入到应用程序中。如何保护 API 密钥和端点以防止未经授权的访问。我的应用不需要用户登录。

我能想到的唯一想法是拥有一个传递 (nodejs) 服务器来调用 API 服务器,我可以将密钥存储在该服务器上,因此它不在应用程序中

但是,现在我需要保护节点服务器。

关于如何执行此操作的任何建议或您有更好的解决方案。

感谢您的建议

例子

class UserService {
  Future<List<users>> getUser() async {
    var response =
        await http.get(Uri.parse(user));
    final int statusCode = response.statusCode;
    User uData = json.decode(response.body);
    return uData
  }
}

App.js

var express = require('express');
var app = express();
var PORT = process.env.PORT || 3000;

app.get('/user', function(req, res) {
  res.json({
    "employees": [
      { "firstName":"John"  , "lastName":"Doe"   },
      { "firstName":"Anna"  , "lastName":"Smith" },
      { "firstName":"Peter" , "lastName":"Jones" }
    ]
  })
});

app.listen(PORT);

【问题讨论】:

  • 你在谷歌上搜索过“node.js 身份验证”吗?

标签: java node.js flutter api security


【解决方案1】:

问题

我能想到的唯一想法是拥有一个传递 (nodejs) 服务器来调用 API 服务器,我可以将密钥存储在该服务器上,因此它不在应用程序中

但是,现在我需要保护节点服务器。

您只是将问题从保护 API 后端转移到必须保护直通服务器,这实际上是我在这篇文章 Using a Reverse Proxy to Protect Third Party APIs 中描述的反向代理:

在本文中,您将首先了解什么是第三方 API,以及为什么不应该直接从移动应用中访问它们。接下来,您将了解什么是反向代理,以及何时以及为何使用它来保护对移动应用中使用的第三方 API 的访问。

逆向工程

因此,事实上,通过使用 pass-thru 服务器,您可以隐藏您的 API 密钥,以免直接暴露给窥探者,但任何人仍然可以通过 pass-thru 服务器访问您的后端 API,即使您还保护了对它通过访问密钥(API 密钥、令牌等),因为他们将通过逆向工程技术或中间人攻击提取访问密钥,就像我在我写的一些文章中描述的那样:

Steal that Api Key with a Man in the Middle Attack:

为了帮助演示如何窃取 API 密钥,我在 Github 中构建并发布了适用于 Android 的 Currency Converter Demo 应用程序,它使用了我们在之前的 Android Hide Secrets 应用程序中使用的相同 JNI/NDK 技术来@ 987654326@.

因此,在本文中,您将学习如何设置和运行中间人攻击,以拦截您控制的移动设备中的 https 流量,从而窃取 API 密钥。最后,您将了解如何缓解中间人攻击。

How to Extract an API key from a Mobile App with Static Binary Analysis:

可用于逆向工程的开源工具范围很广,我们在本文中确实无法触及这个主题的表面,而是我们将重点使用Mobile Security Framework(MobSF) 来演示如何逆向工程我们的移动应用程序的 APK。 MobSF 是一组开源工具,它们在一个有吸引力的仪表板中展示其结果,但在 MobSF 和其他地方使用的相同工具可以单独使用以实现相同的结果。

在本文中,我们将使用 Android Hide Secrets 研究存储库,这是一个使用多种不同技术隐藏 API 密钥的虚拟移动应用。

我真的建议任何人阅读上述文章,以熟悉从移动应用程序中提取秘密的一些可能方法,因为您将学习几种隐藏这些秘密的方法及其权衡。

可能的解决方案

关于如何做到这一点的任何建议......

因此,任何在客户端运行并且需要一些秘密才能访问 API 的东西都可能以不同的方式被滥用,您可以在 this series 有关移动 API 安全技术的文章中了解更多信息。本文将教您如何使用 API Keys、用户访问令牌、HMAC 和 TLS Pinning 来保护 API 以及如何绕过它们。

要解决 什么 访问您的移动应用程序的问题,您需要使用我上面提到的关于移动 API 安全技术的系列文章中提到的一个或所有解决方案,并接受它们可以只会使对您的 API 服务器的未经授权的访问更难绕过,但并非不可能。

可能更好的解决方案

...或者你有更好的解决方案。

可以通过使用移动应用程序证明解决方案来采用更好的解决方案,该解决方案将使 API 服务器知道只接收来自真正的移动应用程序的请求并了解更多信息我建议您阅读 this answer 我给了问题如何保护移动应用程序的 API REST?,尤其是移动应用程序的强化和防护保护 API 服务器 部分em>一个可能更好的解决方案

你想加倍努力吗?

在回答安全问题时,我总是喜欢参考 OWASP 基金会的出色工作。

对于 APIS

OWASP API Security Top 10

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

对于移动应用

OWASP Mobile Security Project - Top 10 risks

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

OWASP - Mobile Security Testing Guide:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2013-07-21
    • 2012-07-27
    • 2020-08-17
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    相关资源
    最近更新 更多