【问题标题】:iFrame link not directly accessableiFrame 链接不可直接访问
【发布时间】:2018-01-16 22:43:46
【问题描述】:

我有以下情况。

在我的网站上,我有一个付费订阅,客户可以在其中登录并查看 pdf 的 html5 翻书。这是我通过使用 iFrame 来完成的。问题是,该链接正在传播给不付费的人,这是我想要阻止的。我尽可能地使用 JS 来阻止人们检查代码。所以这有点照顾。但 Apple 是 Apple,它并不是真正的 iFrames,而是做自己的事情。当您全屏打开翻书时,它会显示 URL,并且会再次传播。 iFrame 和实际的翻书都在同一服务器和域上运行。

我的问题是,有没有办法阻止 URL 在直接访问但仍然在 iFrame 中打开时打开?还是我试图实现不可能?或许你有更好的解决方案?

请告诉我,我愿意接受一切。

PJ

【问题讨论】:

    标签: javascript iframe replace url-rewriting assign


    【解决方案1】:

    您可以通过使用 iframe 内的加密数据和使用父页面中的变量解码数据的脚本来实现。

    只有当两个资源都在同一个域、同一个协议和同一个端口下时,才能做到这一点。 (阅读有关 CORS 的内容)。

    所以,你应该:

    • 使用内部 iframe 和解密数据的密钥创建一个页面。必须在每次请求时使用新密钥对数据进行加密。

    • 在 iframe 中显示的页面中创建一个脚本,该脚本应使用在父页面中检索到的密钥解密页面数据。

    查看这个小脚本以更好地理解:

    // In your page
    window.key = 'KEY';
    
    // In your iframe
    window.encrypted = 'The encrypted data that you will show to the user';
    
    window.decrypt = function() {
        // Here you should get window.key
        // Then you have to decrypt window.encrypted
        // When you finished, you should show the result to the user
    }
    

    还请查看技术人员对此问题的回答:accessing variable in parent page from iframe

    【讨论】:

    • 我不需要 CORS,因为我没有跨越任何东西,两者都在我域的服务器上运行。我的 JavaScript 非常基础,所以我无法真正使用提供的脚本..
    【解决方案2】:

    对于那些寻求答案的人也是如此。我做了以下。

    function CheckIframe() {
            var defaultUrl = "Redirect URL";
            if (window.parent.location == document.location) {
                alert("Incorrectly loaded");
                document.location = defaultUrl;
            }
        }
    

    开始标签中包含 onload="CheckIframe()"。

    基本上,当您在 iframe 之外打开链接时,它会发出警报,一旦您关闭警报,您就会被重定向到 defaultUrl。

    当然,客户可以在他们的浏览器中关闭 JS,但这是有问题的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多