如何保护我的ajax小部件?

时间:2010-11-02 05:07:24

标签: ajax widget sign

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

按下按钮后,小部件将点击我的API,接收回复并将其插入主机页面的表单。

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

我已经集思广益了大量的签名和哈希创意,即将到期的令牌,第三方服务器端代理,在客户端上使用Flash等等,但我无法想出一些确定的欺骗者无法做到的事情很容易相处。

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

也许有另一种方法可以考虑这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

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

$ nonce = make_nonce(); $ secret ='特定于此提供商的密钥'; $ hash = sha1($ nonce。$ secret);

nonce和hash将与请求一起发送到我的服务器,这样我就可以验证它们来自正确登录到第三方系统的浏览器。我将向浏览器返回一个API访问令牌,可以用于API的点击。

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

然后为了限制滥用行为,我会限制访问令牌,以便它们对一个交互式用户有用,但不适合程序化使用。

我还会记录使用过的nonces并使它们一次性使用,加上限制访问权限的能力,以便登录第三方网站的人无法为每个请求获取新的访问令牌他们想做。

这应该在不影响真实客户的情况下显着限制滥用的可能性。