- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个使用 OpenAI 的应用程序接口(interface)
他们为我提供了一个 API token ,我用它来从我的 Android 移动应用程序进行 API 调用( react native )
我知道将此 API token 存储在移动客户端上是一种不好的做法,因为攻击者可能会保留它并使用我的配额和金钱。
我有哪些选择?简单的解决方案是构建后端,但我不想开始实现所有原始 API 方法,我只是更喜欢直接从客户端使用它。
我曾尝试以无法找到的方式存储 token ,但找不到方法。
最佳答案
They provide me with an API token which I use to make the API calls from my android mobile app (react native)
I know it is a bad practice to store this API token on the mobile client because attackers might still it and use my quota and money.
是的,这确实是一种非常糟糕的做法,但至少你意识到了风险,虽然很多人使用这种方法却没有意识到攻击者获取这些 secret (Api token 、API key ,无论你叫什么)有多么容易他们)。
在我撰写的一系列关于移动 API 安全的文章中,我展示了使用静态分析和 MitM 攻击是多么容易:
How to Extract an API key from a Mobile App with Static Binary Analysis :
The range of open source tools available for reverse engineering is huge, and we really can't scratch the surface of this topic in this article, but instead we will focus in using the Mobile Security Framework(MobSF) to demonstrate how to reverse engineer the APK of our mobile app. MobSF is a collection of open source tools that present their results in an attractive dashboard, but the same tools used under the hood within MobSF and elsewhere can be used individually to achieve the same results.
During this article we will use the Android Hide Secrets research repository that is a dummy mobile app with API keys hidden using several different techniques.
一些攻击者更喜欢直接进行 MitM 攻击,因为他们将了解应用程序如何与 API 后端通信并提取所使用的 secret ,以及他们发出请求和解析响应所需的蓝图。
Steal that Api Key with a Man in the Middle Attack :
In order to help to demonstrate how to steal an API key, I have built and released in Github the Currency Converter Demo app for Android, which uses the same JNI/NDK technique we used in the earlier Android Hide Secrets app to hide the API key.
So, in this article you will learn how to setup and run a MitM attack to intercept https traffic in a mobile device under your control, so that you can steal the API key. Finally, you will see at a high level how MitM attacks can be mitigated.
The trivial solution is to build a backend but I don't want to start implementing all the original API methods, I just prefer to use it directly from the client.
你不需要,你只需要你的后端代理你在你的移动应用程序上使用的第三方 API 的请求,在你的情况下,这似乎只适用于 OpenAPI。
例如,当您的移动应用需要向 openapi.io/some/resource
发出请求时,它会将请求发送到 your-reverse-proxy.com/some/resource
然后将获取 /some/resource
部分并构建对 OpenAPI openapi.io/some/resource
的请求,向其中添加 API token header ,即现在它已安全地存储在您的反向代理服务器中。
Using a Reverse Proxy to Protect Third Party APIs
In this article you will start by learning what Third Party APIs are, and why you shouldn’t access them directly from within your mobile app. Next you will learn what a Reverse Proxy is, followed by when and why you should use it to protect the access to the Third Party APIs used in your mobile app.
A recurring theme in this article was the advice not to access Third Party APIs directly from a mobile app. As we have discussed, once your mobile app is released any secret in it becomes public, thus up for grabs by attackers to use on your behalf. If you are not careful you will be the one paying the bill or finding that your free tier resources have been exhausted by someone else.
这种方法的缺点是您仍然有一个需要保护的 API key ,用于访问反向代理的 key ,但至少您没有暴露您的 OpenApi secret ,并且您可以使用多种机制来限制请求并确保对您的反向代理的安全访问,以确保仅响应来自您的移动应用程序的真实且未修改实例的请求。
您可以设计或使用现成的机制,以便在需要在向 OpenAPI 发出的 API 请求中使用 secret 时,及时将 secret 传送到您的移动应用程序,但您需要确保 secret 仅交付给您的移动应用程序的真实且未修改的实例,这些实例未受到 MitM 攻击,在运行时被 Frida 等工具篡改/检测,否则您的 secret 很容易通过 Hook 到将它们添加到API 请求中的 header 或通过 MitM 攻击拦截请求,即使通信 channel 通过证书固定进行保护,因为在攻击者控制的设备中绕过它并不难。
在my reply问题Storing Api Keys Securely in Flutter or Sending Payment Details to my Server?我将更详细地介绍运行时 secret 保护方法。
在任何对安全问题的回答中,我总是喜欢引用 OWASP 基金会的出色工作。
The OWASP API Security Project seeks to provide value to software developers and security assessors by underscoring the potential risks in insecure APIs, and illustrating how these risks may be mitigated. In order to facilitate this goal, the OWASP API Security Project will create and maintain a Top 10 API Security Risks document, as well as a documentation portal for best practices when creating or assessing APIs.
OWASP Mobile Security Project - Top 10 risks
The OWASP Mobile Security Project is a centralized resource intended to give developers and security teams the resources they need to build and maintain secure mobile applications. Through the project, our goal is to classify mobile security risks and provide developmental controls to reduce their impact or likelihood of exploitation.
OWASP - Mobile Security Testing Guide :
The Mobile Security Testing Guide (MSTG) is a comprehensive manual for mobile app security development, testing and reverse engineering.
关于android - 如何在没有人窃取 token 的情况下使用我的移动应用程序中的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75079926/
我正在开发一个应用程序,它使用 OAuth - 基于 token 的身份验证。 考虑到我们拥有访问和刷新 token ,这就是流程的样子。 Api call -> intercepter append
如何取消标记此代码的输出? 类(class)核心: def __init__(self, user_input): pos = pop(user_input) subject = ""
当我使用命令 kubectl 时与 --token标记并指定 token ,它仍然使用 kubeconfig 中的管理员凭据文件。 这是我做的: NAMESPACE="default" SERVICE
我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本 token 授权的工作
我正在尝试从应用服务获取 Google 的刷新 token ,但无法。 日志说 2016-11-04T00:04:25 PID[500] Verbose Received request: GET h
我正在开发一个项目,只是为了为 java 开发人员测试 eclipse IDE。我是java新手,所以我想知道为什么它不起作用,因为我已经知道该怎么做了。这是代码: public class ecli
我正在尝试使用 JwtSecurityTokenHandler 将 token 字符串转换为 jwt token 。但它出现错误说 IDX12709: CanReadToken() returned
我已阅读文档 Authentication (来自 Facebook 的官方)。我仍然不明白 Facebook 提供的这三种访问 token 之间的区别。网站上给出了一些例子,但我还是不太明白。 每个
我的部署服务器有时有这个问题,这让我抓狂,因为我无法在本地主机中重现,我已经尝试在我的 web.config 中添加机器 key ,但没有成功远。 它只发生在登录页面。 我的布局:
我已经设法获得了一个简单的示例代码,它可以创建一个不记名 token ,还可以通过阅读 stackoverflow 上的其他论坛来通过刷新 token 请求新的不记名 token 。 启动类是这样的
如果我有以前的刷新 token 和使用纯 php 的访问 token ,没有 Google Api 库,是否可以刷新 Google Api token ?我在数据库中存储了许多用户刷新和访问 toke
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
当我有一个有效的刷新 token 时,我正在尝试使用 Keycloak admin REST API 重新创建访问 token 。 我已经通过调用 POST/auth/realms/{realm}/p
我正在尝试让第三方 Java 客户端与我编写的 WCF 服务进行通信。 收到消息时出现如下异常: Cannot find a token authenticator for the 'System.I
在尝试将数据插入到我的 SQl 数据库时,我收到以下错误 System.Data.SqlServerCe.SqlCeException: There was an error parsing the
使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包
我最近注册了 Microsoft Azure 并设置了认知服务帐户。使用 Text Translation API Documentation 中的说明我能够使用 interactive online
我使用 IAntiforgery API 创建了一个 ASP.Net Core 2 应用程序。 这提供了一种返回 cookie 的方法。 客户端获取该 cookie,并在后续 POST 请求中将该值放
我正在使用 spacy 来匹配某些文本(意大利语)中的特定表达式。我的文本可以多种形式出现,我正在尝试学习编写一般规则的最佳方式。我有如下 4 个案例,我想写一个适用于所有案例的通用模式。像这样的东西
我无法理解 oauth 2.0 token 的原则处理。 我的场景是,我有一个基于 web 的前端后端系统,带有 node.js 和 angular 2。用户应该能够在此站点上上传视频。然后创建一些额
我是一名优秀的程序员,十分优秀!