【发布时间】:2017-08-09 01:51:57
【问题描述】:
我想创建一个 Javascript 小部件,我的用户可以将其放在他们的网站上。 该小部件能够创建音频,这又会花费我的用户的钱。
为了便于说明,假设每次放置在我用户网站上的小部件由互联网上的任何人(即我的用户的用户)加载时,我都会向我的用户收取 1 美元的费用。
小部件是包裹在 HTML 音频播放器周围的 Javascript 代码。每次加载时,JS 代码都会向我的后端 API 发出请求,并在收到来自我的后端 API 的响应后,构建播放器。
图表:
我担心不是我的用户的人恶意使用。 假设某人获取了他们在属于我的一个用户的网站上找到的小部件源代码,并将其放在 他们的 网站上。因此,他们会使用我的服务,但不会为此付费。相反,我的实际用户会为此付费(假设我使用公共 API 密钥作为区分我的用户的一种方式)。
通常,这可以通过让服务器端库负责任何可能花钱的使用来防止。例如,我使用 Pusher 作为我的 WebSockets IaaS,每当我想发布消息时,我都必须在服务器端使用他们的 PHP SDK,同时使用私有和公共 API 密钥。
在我的用例中,必须没有服务器端库。
问题:如何确保我收到的 API 请求是合法的?
我考虑使用放置小部件的主机名作为合法性措施。在小部件设置期间,我可以要求我的用户将某些(子)域列入白名单并拒绝所有不符合条件的请求,但这很容易被例如自定义本地域或 CURL-精心设计的请求。
我知道这可能是不可能的。
【问题讨论】:
标签: javascript api security widget