【问题标题】:Best Practices For Secure APIs?安全 API 的最佳实践?
【发布时间】:2011-01-26 22:45:08
【问题描述】:

假设我有一个网站,其中包含有关我们产品的大量信息。我希望我们的一些客户(包括我们!)能够通过各种方法查找我们的产品,包括:

1) 从以酷炫的 JavaScript 方式返回数据的 AJAX 调用中提取数据 2) 创建使用该数据的 iPhone 应用程序; 3) 让其他 Web 应用程序将这些数据用于自己的目的。

通常,我会创建一个 API 并完成它。然而,这些数据实际上是轻度保密的——也就是说,我们不希望我们的竞争对手每天早上都能查看我们所有的产品,然后自动设置他们的价格来削弱我们的价格。而且我们还希望能够查看谁可能在滥用系统,所以如果有人每天对我们的 API 进行一千万次复杂的调用并让我们的服务器陷入困境,我们可以将其切断。

我的下一个合乎逻辑的步骤是创建一个开发人员的密钥来限制访问 - 这对于 Web 应用程序来说可以正常工作,但对于任何 AJAX 调用来说就不是那么好了。 (在我看来,他们需要在 JavaScript 中提供密钥,它是明文且易于查看,因此实际上根本没有安全性。特别是如果我们在我们的网站上使用我们自己的开发人员的密钥进行这些 AJAX 调用。)

所以我的问题是:在查看了 Oauth 和 OpenID 一段时间后,我不确定是否有一个解决方案可以处理上述所有三个问题。开发人员的密钥是否有某种规范的“最佳实践”,或者 Oauth 和 OpenID 能否以我尚未了解的某种方式轻松处理 AJAX 调用,还是我完全遗漏了什么?

【问题讨论】:

    标签: php ajax api openid oauth


    【解决方案1】:

    我认为 2-legged OAuth 是您想要满足 #2 和 #3 的要求。对于 #1,我建议客户不要直接针对您的应用程序发出 JS 请求,而是可以通过他们自己的 Web 应用程序代理这些请求。

    【讨论】:

    • 但是如何保护这个 API 代理服务器以防止攻击者滥用它呢?
    【解决方案2】:

    中途解决方案是要求 API 密钥;然后要求任何使用它的人实际上都不会直接将它与 AJAX 一起使用;但将他们的调用包装在服务器端请求中,例如:

    AJAX -> customer server -> your server -> customer server -> user
    

    为感兴趣的各方创建一个简单的 PHP API 应该不会太棘手,而且您自己的 iPhone 应用程序显然会切断中间人,使用自己的 API 密钥。

    【讨论】:

    • 必须有办法做到这一点——Google Analytics 不是通过允许您将一些 JS 直接粘贴到您的页面中并以某种方式进行安全 API 调用来做到这一点吗?我想知道他们是怎么做到的。
    【解决方案3】:

    OAuth 和 OpenID 不太可能与 AJAX 调用直接相关。最有可能的是,您的 AJAX 处理程序前面会有某种授权过滤器来检查 cookie,并且该 cookie 可能是作为 OpenID 身份验证的结果设置的。

    这似乎归结为“how do I prevent screen scraping”的问题。如果只有登录的客户才能看到价格,那是一回事,但假设您像大多数零售网站一样,并且客户注册的障碍尽可能低,这并没有真正的帮助。

    而且,嘿,如果您的价格可用,您就不会出现在 Froogle、Nextag 或 PriceGrabber 等搜索引擎中。但这更像是一项业务战略决策,而不是编程决策。

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2015-11-29
      • 2010-09-28
      • 1970-01-01
      • 2013-06-19
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多