1

我想创建一些只在给定域上运行的 javascript。我们想给我们的每个订阅者一些他们只能在他们的域上运行的 javascript。javascript 将创建一个 iFrame 并引入一个页面等。

如果将 javascript 放在不同的域中,则会引发错误并且脚本停止并且 iFrame 页面将不会加载。在你说这不可能之前,它是由谷歌地图完成的。

所以,简而言之,我们想模仿谷歌地图正在做的事情。您在 Google 注册了一个域,他们会为您提供具有密钥的代码,如果您将此代码放在任何其他域上,它将无法正常工作。他们是怎么做到的呢?

4

3 回答 3

0

另一种可能的解决方案是使用 IP 地址,因为代码放置在服务器上。我用这种方法制作了一个许可证脚本,到目前为止只有 2 个疯狂的客户,但那是因为他们在没有我告诉的情况下将他们的网站转移到了另一台服务器。

我认为有客户检查很好,但如果有人弄清楚脚本是如何工作的,那可以绕过。因此,请始终进行服务器端检查。

这是我用于许可证检查的一些代码,它基于服务器。此外,我删除了一些特定于我的网站的功能。我不知道如何发布代码,所以我把它放在 pastebin 上。 http://pastebin.com/ftEDXhTP

于 2013-11-08T03:29:50.393 回答
0

当您向用户提供他们的代码片段时,在服务器端,使用您提供给用户的标识符存储特定域名。您可能会自动生成此代码,就像 StackOverflow 对您的问题所做的那样。他们称之为它19850979,所以让我们用它作为你给用户的标识符。当用户放置片段时,例如当他们使用 iframe 时,iframe 中引用的 URL 必须包含标识符。

不确定您的服务器端技术是什么,但通常这个概念适用于所有方面:

例如...您的服务器将此信息保存在其数据库中:

user-example-domain.com,19850979

您的用户的 iframe(您生成并提供给他们)参考:

your-serving-domain.com/iframeloader/19850979

现在,在处理/iframeloader/和接收19850979标识符的代码中,比较引用者的主机名。这是Referer标头,它是一个 HTTP 标头字段:

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

如果引用者的主机名是值,则继续加载 iframe。如果没有,请中止并显示某种信息性错误消息。

于 2013-12-31T17:39:16.900 回答
0

hostname属性window.location包含一个主机名。它可以被伪造,因此您也可以Referer在提供脚本时尝试检查标题 - 但绝对不要依赖它。

您还可以通过向该域上不存在的页面发出请求来进行一些有效性检查 - 如果开发人员作弊,它将被跨域策略阻止。

于 2013-11-08T03:19:17.827 回答