问题
我有一项向用户推送内容的服务。为了向他们的用户提供这些内容,客户将在他们的网站上包含一个脚本。他们的脚本向我的服务器发送一个令牌以识别它是哪个客户,但问题是:如果有人从用户的站点复制脚本,他们可以接收此实时内容,并且客户需要为不在其站点上的用户付费. 那么,有没有办法确保脚本只包含在他们的网站上?谷歌分析是如何做到这一点的?
我有一个想法,但我不知道这是否完全安全。
- 客户告诉我他们想在其中包含我的脚本的任何域(包括子域)。
- 我给用户一个非常小的文本文件,他们存储在他们的服务器上。
- 加载我的脚本后,它会检查 window.location.host,并尝试从托管域的根目录中获取文本文件。
- 如果找到文件,并且内容与我给客户文件时生成的内容相匹配,我将激活服务。
这行得通吗?
为什么我不能使用 window.location
假设我的脚本读取 window.location,并将其发送到 urlmydomain.com?token=ABC&locationhost=goodcustomer.com
现在 baduser.com 的所有者想要滥用 gooduser.com 的帐户,所以他包含了 gooduser.com 的脚本。该脚本现在发送一个 ajax 请求到mydomain.com?token=ABC&locationhost=badcustomer.com
这不会启动服务,因为 badservice.com 不是 goodcustomer.com 的所有者在注册时输入的域。这很容易绕过,因为 badcustomer.com 的所有者可以查看我的脚本,注意到它正在发送验证 url 的请求,然后发送他自己的请求。所以他会向 发送请求mydomain.com?token=ABC&locationhost=goodcustomer.com
。我的服务器看到此请求,将 locationhost 与与令牌关联的域进行比较,并开始将针对 goodcustomer.com 的用户的内容提供给 badcustomer.com 的用户。我的服务器无法知道请求是由我自己的脚本发送的,还是由试图冒充实际客户的用户发送的。