我想创建一些只能在给定域上运行的javascript。我们希望为每位订阅者提供一些只能在其域名上运行的JavaScript。 javascript将创建一个iFrame并引入一个页面等。
如果javascript被放置在不同的域上,则会引发错误并且脚本停止并且不会加载iFrame页面。在你说这是不可能的之前,它是由谷歌地图完成的。
因此,简而言之,我们想模仿谷歌地图的作用。您向Google注册域名,他们会为您提供包含密钥的代码,如果您将此代码放在任何其他域名上,则无法使用。他们是怎么做到的?
答案 0 :(得分:0)
hostname
的{{1}}属性包含主机名。它可以伪造,因此您也可以尝试在提供脚本时检查window.location
标题 - 但绝对不依赖于此。
您还可以通过向该域上不存在的页面发出请求来进行一些有效性检查 - 如果开发人员作弊,它将被跨域策略阻止。
答案 1 :(得分:0)
另一种可能的解决方案是使用IP地址,因为代码放在服务器上。 我用这种方法制作了一个许可证脚本,到目前为止只有2个疯狂的客户,但那是因为他们将网站移动到另一台服务器而没有我告诉它。
我认为有一个客户端检查很好,但如果有人弄清楚脚本是如何工作的,那么可以绕过它。所以,总是进行服务器端检查。
以下是我用于许可证检查的一些代码,它基于服务器。 此外,我删除了一些特定于我的网站的功能。 我无法弄清楚如何发布代码,所以我把它放在pastebin上。 http://pastebin.com/ftEDXhTP
答案 2 :(得分:0)
当您向用户提供他们的代码片段时,在服务器端,存储具有您为用户提供的标识符的特定域名。您可能会自动生成此代码,就像StackOverflow对您的问题所做的那样。他们称之为19850979
,因此我们将其用作您为用户提供的标识符。当用户将代码段放在适当位置时,例如,当他们使用iframe时,iframe中引用的网址必须包含标识符。
不确定您的服务器端技术是什么,但通常这个概念全面运作:
例如......您的服务器将此信息保存在其数据库中:
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。如果没有,请中止并显示某种信息性错误消息。