iFrame link 不可直接访问

iFrame link not directly accessable

我有以下情况。

在我的网站上,我有一个付费订阅,客户可以登录并查看 html5 pdf 动画书。我通过使用 iFrame 来做到这一点。问题是,link 正在传播给不付费的人,这是我想防止的。我尽可能地使用 JS 来阻止人们检查代码。所以这在一定程度上得到了照顾。但 Apple 就是 Apple,它并不是真正的 iFrame,而是做自己的事情。当您以全屏模式打开动画书时,它会显示 URL 并再次传播。 iFrame 和实际动画书都在同一服务器和域上 运行。

我的问题是,当 URL 被直接访问但仍然在 iFrame 中打开时,有没有办法阻止它打开?还是我正在努力实现不可能的目标?也许你有更好的解决方案?

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

八打灵再也

您可以通过使用 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

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

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

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

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

当然,客户可以在他们的浏览器中关闭 JS,但那是很重要的。