Php 安全API的最佳实践?

Php 安全API的最佳实践?,php,ajax,api,openid,oauth,Php,Ajax,Api,Openid,Oauth,比如说,我有一个网站,里面有很多关于我们产品的信息。我希望我们的一些客户(包括我们!)能够通过各种方法查找我们的产品,包括: 1) 从AJAX调用中提取数据,这些调用以酷的JavaScripty方式返回数据 2) 创建使用这些数据的iPhone应用程序; 3) 让其他web应用程序为自己的目的使用这些数据 通常,我只需要创建一个API并完成它。然而,这些数据事实上是相当机密的——也就是说,我们不希望我们的竞争对手每天早上都能查看我们的所有产品,然后自动设定价格以低于我们。我们还希望能够了解谁可能

比如说,我有一个网站,里面有很多关于我们产品的信息。我希望我们的一些客户(包括我们!)能够通过各种方法查找我们的产品,包括:

1) 从AJAX调用中提取数据,这些调用以酷的JavaScripty方式返回数据 2) 创建使用这些数据的iPhone应用程序; 3) 让其他web应用程序为自己的目的使用这些数据

通常,我只需要创建一个API并完成它。然而,这些数据事实上是相当机密的——也就是说,我们不希望我们的竞争对手每天早上都能查看我们的所有产品,然后自动设定价格以低于我们。我们还希望能够了解谁可能滥用系统,因此,如果有人每天对我们的API进行1000万次复杂调用并使我们的服务器陷入困境,我们可以将其切断

我的下一个逻辑步骤是创建一个开发人员密钥来限制访问——这对web应用程序来说很好,但对任何AJAX调用来说都不太好。(在我看来,他们需要在JavaScript中提供密钥,它是纯文本的,易于查看,因此实际上根本没有安全性。特别是如果我们在我们的站点上使用我们自己的开发人员密钥来进行这些AJAX调用的话。)


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

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

中间解决方案是需要API密钥;然后要求使用它的人不要直接在AJAX中使用它;但将其呼叫包装在服务器端请求中,例如:

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

为感兴趣的人创建一个简单的PHP API应该不会太棘手,而您自己的iPhone应用程序显然会省去中间人的工作,附带自己的API密钥。

OAuth和OpenID不太可能直接与AJAX调用有太多关系。最有可能的情况是,在AJAX处理程序前面会有某种授权过滤器来检查cookie,并且该cookie可能是由于OpenID身份验证而设置的

这似乎归结为一个问题:“如果只有登录的客户才能看到价格,这是一回事,但假设你像大多数零售网站一样,客户注册的门槛尽可能低,这并没有真正的帮助


而且,嘿,如果你的价格不可用,你就不能出现在像Froogle、Nextag或PriceGrabber这样的搜索引擎中。但这更多的是一个商业战略决策,而不是一个编程决策。

一定有办法做到这一点——Google Analytics不是这样做的吗?它允许您将一些JS粘贴到页面中,并以某种方式进行安全API调用?我想知道他们是如何做到这一点的。但如何保护这个API代理服务器以防止攻击者滥用它呢?