【问题标题】:Securing API Keys on clients (JavaScript, Android, iOS, etc.)保护客户端上的 API 密钥(JavaScript、Android、iOS 等)
【发布时间】:2013-06-12 02:33:33
【问题描述】:

我正在开发一个以 API 为中心的 Web 应用程序,该应用程序具有自定义授权方法,该方法包括基于请求方法、URL、参数、公共 API 密钥并由私有 API 密钥编码的字符串。这在服务器端工作正常,但在客户端,私有 API 密钥(和授权方法)将易受攻击。在过去的一个小时左右,我一直在寻找保护此 API 密钥的好方法,我能找到的最佳方法是通过我的服务器进行代理,但我仍然不确定 100%。

首先,我应该担心吗?我想在我的 Web 应用程序中优先考虑安全性,但是任何涉及修改用户帐户的操作都需要一个临时的加密令牌来授权请求​​(除了 HMAC 哈希)。

我对代理的理解是,您将向您的服务器发出请求,然后服务器将使用私钥加密并返回信息..但是服务器如何验证请求来自具有有效 API 密钥的源?

谁能提供任何关于我应该做什么的见解?我觉得这可能是任何客户端代码的漏洞,包括 JavaScript、iOS 和 Android。

【问题讨论】:

  • 私钥会以何种方式易受攻击?您必须将密钥提供给客户,否则将无法正常工作...
  • 目前客户端只能是我的官方应用程序(网络和移动)。但是私钥和授权方法将在 JavaScript 源代码中可见,以便在站点上进行任何 AJAX 调用。
  • 为什么要做自定义授权方式?您通常最好使用经过深思熟虑、经受住时间考验等的标准方法。您最关心的威胁模型是什么?使用您的 API 的第三方应用?
  • 谢谢。我想我会做一些混淆方法来使其更难使用(如果 API 密钥被滥用,我总是可以破坏它)。好消息是没有安全风险,因为用户帐户有一个完整的秘密(服务器端)令牌系统,而 API 密钥的唯一风险就是以 JSON 格式(而不是 HTML)窃取我们的搜索结果刮)..

标签: javascript api security


【解决方案1】:

你永远不能相信客户。即使您混淆了,仍然有人可以弄清楚。例如,攻击者可以对混淆算法进行逆向工程,查看设备内存,甚至捕获通过网络发送的内容。

但是,您仍然可以通过在服务器端实施安全性来制作安全的应用程序。例如,用户应该需要经过身份验证才能成功发出特权 API 请求。

此外,您可以在服务器端强制使用 API,无论是通过输入验证、速率限制还是 IP 地址跟踪。

【讨论】:

  • 每次我因为有人支持这个问题而回到这个问题时,我都会看到“你永远不能信任客户”。我已经成为这种心态的忠实拥护者,它甚至帮助简化了一些 API 创建(即,在注册时无需确认密码,因为无论如何客户端都可以伪造)。
  • @sam 确认是为了让用户确保他们输入了他们认为输入的内容。两次错误输入密码的可能性较小。
猜你喜欢
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2016-01-17
  • 2015-01-18
相关资源
最近更新 更多