1

我想围绕我在服务器上托管的 ajax API 创建一个小部件。该小部件也将由我的服务器提供,并放置在第 3 方网站上。小部件必须能够访问托管页面的 DOM(因为它访问页面上的表单数据),因此必须使用脚本标签而不是 iframe 来嵌入它。

当按下按钮时,小部件将点击我的 API,接收响应,并将其插入到托管页面的表单中。

到目前为止,使用脚本标签和 ajax 都很好。在几分钟内运行了一个快速的概念验证。但是我怎样才能阻止第四方查看第三方页面上的代码并复制它以便在他们的页面上也有小部件?该小部件将免费提供给所有人,但我想知道谁在使用它并控制访问。我还想让人们在没有小部件的情况下访问 API。

我已经集思广益了很多签名和散列的想法、过期令牌、第 3 方服务器端代理、在客户端上使用 Flash 等等,但我无法想出一个坚定的欺骗者无法公平解决的问题容易地。

换句话说,我想确保只有呈现小部件的客户端才能调用 API 并获得响应。

也许还有另一种方式来思考这个问题?

4

1 回答 1

0

好吧,对于任何有兴趣的人,我想出了一个解决方案:

我要求我的小部件仅显示在需要登录第三方网站的页面上。即不在公开页面上。

我还将要求第 3 方网站嵌入几行服务器端代码(例如 PHP),这些代码会生成随机随机数并将其与密钥组合并创建哈希:

$nonce = make_nonce(); $secret = '此提供者特定的密钥'; $hash = sha1($nonce . $secret);

nonce 和 hash 将与请求一起发送到我的服务器,因此我可以验证它们来自正确登录到 3rd 方系统的浏览器。我将向浏览器返回一个 API 访问令牌,该令牌可用于访问 API。

这将 API 访问与特定的第 3 方集成商联系起来。

然后为了限制滥用,我将对访问令牌进行速率限制,以便它们对一个交互式用户有好处,但不适用于编程使用。

我还将记录使用的随机数并使其成为一次性使用,加上速率限制获取访问令牌的能力,因此登录到第 3 方站点的人无法继续为他们想要的每个请求获取新的访问令牌制作。

这应该会显着限制滥用的可能性,而不会影响真正的客户。

于 2010-11-05T14:39:34.663 回答