javascript - 防止 HTTP GET 请求中的 key 泄漏

标签 javascript security websecurity

有很多关于防止 API key 泄漏的一般信息,但我无法找到专门用于以 API key 作为参数发出 HTTP GET 请求的正确程序。据我所知,任何用户都可以轻松检查请求并获取应用程序的私有(private) API key 。

有什么方法可以安全地发出 GET 请求吗?如果第三方 API 提供了可用的方法,我会使用 GET 以外的方法。可能只是糟糕的设计。

来 self 正在开发的应用程序的示例。当我向第三方 API 发出 GET 请求时,我的 API key 可以轻松地在检查器中看到:

代码:

const response = await fetch('https://www.someexampleimadeup.com?var=something&key=LOOKITSMYPRIVATEKEY'

检查员:

enter image description here

最佳答案

你说得对。

如果您通过客户端 JavaScript 发起的 GET 请求传递私有(private) API key ,则您将暴露该 key 。不,如果您想在客户端执行此操作(如果您从浏览器上运行的 javascript 文件获取 API),则没有办法解决这个问题。

这是因为根据定义,HTTP 请求消息由以 ASCII 编码的文本信息组成(正如正确解释的 in this MDN article )。任何协议(protocol)的所有 HTTP 请求始终可供发起请求的浏览器用户使用,即使您使用 HTTPS。

重要的是要解决客户端 JavaScript 代码中存在您的私有(private) API key 这一简单事实导致其不安全 - 公开。

如果您可以选择运行服务器端 JavaScript(例如 Node.js 后端服务器),您可以获取您的服务器 fetch("https://yourserver.com/resource") ,然后您的服务器就可以使用私钥 fetch('https://api.com/?api_key=XXXXX') 获取 API。现在,您的后端服务器是中间人(或黑匣子),负责在不暴露私钥的情况下获取 API 数据。

您不会暴露 key ,因为用户只知道对您的服务器的 GET 请求以及您选择返回的数据。此外,由于您可以控制服务器,因此您可以选择通过不提供写入该 key 的文件来不公开您的私有(private) API key 。

在 Node.js 网络服务器中,您通常将 API key 存储在“.env”文件 PRIVATE_API_KEY=XXXXXXX 中,该文件不提供服务。然后将该文件添加到 .gitignore 中存在的规则中,以防止将其推送到任何公共(public)存储库。借助 dotenv 等节点包,您可以在代码中将其作为 process.env 对象 process.env.PRIVATE_API_KEY 的属性进行访问(一些示例 in their npm page )。

关于javascript - 防止 HTTP GET 请求中的 key 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72455213/

相关文章:

spring - 无需用户登录即可保护 Spring Boot 应用程序

Php 没有返回正确的 MIME 类型

javascript - 需要帮助使我的 HTML 和 CSS 代码更有效地实现导航效果

javascript - 我对 React 和 TypeScript 中的这个简单组件感到困惑

reactjs - 用户能否在 Chrome 中更改 Redux/Mobx 的值以获得对受限 View 的访问权限?

reactjs - 在网页中保护社会安全号码的正确方法是什么?

javascript - 在代码片段中加载 jQuery 并将元素添加到空白页面

database - 为什么要限制密码的长度?

php - 如何检测表中的冗余行?

php - 限制授权 php 用户的文件访问