【问题标题】:HTML5 domain locking?HTML5 域锁定?
【发布时间】:2012-01-17 18:19:55
【问题描述】:

我有一个项目,我们正在创建一个基于 html5 的动态视频播放器,其中包含一堆 Ajax 控件和功能。目的是该播放器将被其他域使用。我们的旧播放器使用 flash 并且可以轻松锁定域,但现在是否有 任何 方法可以在 HTML5 中进行域锁定?

请记住,这不仅仅是视频本身,我们还希望为基于 ajax 的控件加载 html 内容。看起来 iframe 是显而易见的选择,但是没有办法进行域锁定。

有什么想法吗?

【问题讨论】:

  • 请在此上下文中定义“域锁定”。这可能意味着几件事......
  • 您向“狂野”发布的 HTML 和 JS 将始终被读取和反向工程 - 因为与 flash 不同,源代码处于非常易读的视图中。即使是youtube视频,不管怎么隐藏url等参数,视频url还是会被firebug之类的工具截取。
  • @DaveRandom “域锁定”是指阻止我们的 html5 播放器加载我们将在内部保留列表的非白名单域。
  • @fskreuz 我们不关心保护内容。我们只想限制播放器本身加载未经批准的域。我们当然不关心我们的 js 或 html 代码被泄露:)
  • @Citizen 我的意思就是这样。不管youtube如何隐藏所有参数,它可能不在源中,它会被揭示和反转。现在,您正在转向 HTML,这是一种源代码可见的语言,您可以复制您的源代码,删除您的锁定代码,然后在其他地方使用。

标签: php html video-streaming html5-video


【解决方案1】:

你可以使用上面的函数,但是它的作用很明显,所以任何人都可以删除域锁。

有一些服务可以将您的页面锁定到一个域名,我知道有两个。

jscrambler.com - 这是一个付费工具,但如果你只想锁定你的域,这可能有点矫枉过正。

DomainLock JS - 这是一个免费的域锁定工具。

【讨论】:

    【解决方案2】:

    我来这里也是为了找同样的东西。但我想我已经找到了答案。 到目前为止,我发现的最好方法是去除其 http:// 的 location.href,然后检查白名单域的前几个字符。所以:

        if(checkAllowedDomains())
        {
             initApplication();
        }
        else 
        {
             // it's not the right domain, so redirect them!
             top.location.href="http://www.snoep.at";
        }
    
        function checkAllowedDomains()
        {
            var allowed_domains=new Array();
            allowed_domains.push("www.snoep.at");
            allowed_domains.push("www.makinggames.nl");
            allowed_domains.push("www.google.com");
            // add whatever domain here!
            var domain=top.location.href;
            domain.replace('http://','');
            var pass=false;
            for(i=0;i<allowed_domains.length;i++)
            {
                var shortened_domain=domain.substr(2,allowed_domains[i].length);
                if(shortened_domain.indexOf(allowed_domains[i])!=-1)
                {
                  pass=true;
                }
            }
        }
    

    这段代码检查了几个allowed_domains,你可以很容易地扩展数组。 那是代码的问题,它非常可读。所以,我建议你通过一个 js-minimizer 让它变得不那么明显,并将它包含在你页面上的每个 js 中。 InitApplication() 是一个启动页面或应用程序的函数。

    因为您删除了 http:// 的位置(可能存在也可能不存在),然后仅检查允许域的特定长度(包括 WWW!),因此您排除了可能看起来像的子域这个:google.com.mydomain.com 并抛出检查!

    希望这会有所帮助。

    【讨论】:

    • location.hostname 呢?
    【解决方案3】:

    尝试读取 REFERER 标头,如果该站点未列入黑名单,则不要显示播放器。

    【讨论】:

    • REFERER 不可靠。任何使用它的解决方案都可能很容易中断,因为它将高度依赖于客户端。无法保证客户端甚至会设置此标头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多