33

所以,我正在开发一个仅供我自己使用的小型应用程序,也许是一个 Git 上的开源项目。我正在使用来自 Envato Marketplaces 的 API,众所周知,有些操作不需要任何密钥,但同时有些操作确实需要。

我首先用 PHP 为 Envato API 制作了一个不错的 API 包装器,但后来我决定用 JavaScript 做一些实验,所以我正在用 JavaScript 开发相同的包装器。到目前为止,我对公共操作没有任何问题,但我现在必须使用 API Key。

我的问题是是否有办法保护 JavaScript 中的 API 密钥。我不能只是把它以纯文本的形式放在那里,因为它可以被其他看到代码的人使用。那么会有一个 API 保密的实现吗?也许从带有 XHR 的 JSON 文本文件中获取它?

4

2 回答 2

27

简短的回答:没有

无论您做什么来混淆密钥,您仍然必须以某种方式发送它以使其在客户端上可用,因此可以使用 fx 提取它。萤火虫。

即使您设计了一种很棒的神奇方法来保密密钥,在某些时候您也必须发出实际的 API 请求,并且由于它必须从浏览器发送,攻击者将能够读出密钥来自 Firebugs 网络选项卡的纯文本。

正确的做法是围绕需要密钥的 API 调用创建一个 PHP 包装器,然后从 Javascript 调用该包装器。

于 2012-07-13T12:31:16.947 回答
2

我现在的解决方案是在 rust 中编写一个小包装器,然后将其放入 /cgi-bin 并调用它。这应该使 api-key、api creds 和 session 数据与客户端分开。

于 2019-05-23T17:34:22.603 回答