在Chrome扩展中保护网站API密钥

46
我正在使用Remember the Milk网络API构建Chrome扩展程序。为了调用该API中的方法,我需要使用API密钥和“共享密钥”来签署我的请求。

我的担忧是,如果我将它们包含在发布的扩展程序中,任何用户都可以打开扩展程序并提取这些值。这可能对用户构成安全风险,但他或她肯定可以使用/滥用我的API密钥,并可能让其被吊销。

这是我应该担心的问题吗?在已发布的JavaScript应用程序中保护此类型信息有没有最佳实践?

1个回答

33

在浏览器中运行的JS应用程序内,您最终无法真正隐藏任何内容。您可以混淆或缩小代码,这会使普通用户分散注意力,以免窥探,但最终始终有可能获取您的纯文本密钥。

如果您真的需要防止这种情况发生,则一个选项是将扩展程序的调用传递到您可以访问的服务器上。您的服务器可以添加任何所需的参数进行签名,将调用转发给相关API,并将API的响应传递回用户。当然,这会增加带宽/正常运行时间限制,这可能不是您想要的。


1
我担心这将是解决这个问题的最佳方案。编写支持免费、简单插件的 Web 服务肯定是杀鸡焉用牛刀。又一次为编译的本地应用程序取得胜利... - Josh Earl
1
是的。出于这个原因,我们基本上禁止在我们的API上使用基于JS的身份验证。当然,仍然有可能有人伪造请求到您的Web服务...! - Graham
7
编译成本地应用程序也有 API 密钥,并且可以使用 SSL 嗅探工具(如 Charles / Fiddler 等)提取它们。但是,浏览器的 JavaScript 使这更容易实现。 - mikemaccana
2
你如何防止用户滥用你的网络服务? - Jared Beach
1
Web服务器如何验证扩展名?(即,如何防止第三方代表他们访问API使用您的服务器?)(类似于Jared的问题) - Gert van den Berg
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接