保护iFrame - 仅允许它在一个域上工作

时间:2011-11-17 15:19:08

标签: html security iframe widget

我创建了一个Widget,并使用iFrame将其嵌入到其他网站上。我想要做的是确保没有人可以查看源代码并复制iFrame代码并将其放在自己的网站上。

我可以在数据库中存储应该允许的URL。我以前看过它,一个网站有一个很长的加密代码,如果它与域不匹配,那么它说访问被拒绝..

有谁知道我该怎么做?

谢谢!

6 个答案:

答案 0 :(得分:12)

不,你不能这样做。你能做的最好的事情如下:

if (window.top.location.host != "hostname") {
    document.body.innerHTML = "Access Denied";
}

将以上内容添加到JavaScript中,然后使用JavaSript obfuscator

答案 1 :(得分:8)

您无法阻止人们查看您的HTML,但有一些标题可以让您指定哪些网站可以嵌入您的iframe。请查看X-Frame-Options标题和Content-Security-Policy的{​​{3}}指令。尊重它的浏览器会在嵌入到其他人的网站时拒绝加载iframe。

答案 2 :(得分:5)

在IFRAME中显示的页面代码中的服务器上,检查Referer标题的值。除非出于隐私原因而阻止此标头,否则它将包含承载IFRAME的页面的URL。

答案 3 :(得分:2)

你所要求的几乎是不可能的。如果您在网上提供源,则可以通过某种方式复制它。任何javascript技巧都可以通过使用wget或curl等低级工具来解决。

所以即使你保护它,你仍然会发现有人可以在理论上复制代码(因为浏览器会收到代码),并且如果这样确定可以将它放在他们自己的网站上。

答案 4 :(得分:1)

我遇到了同样的问题,但我在主页上返回了用户。我传播了这个决定。

必须放在有iframe的地方

<script>
        $(window).load(function () {
            var timetoEnd = '';   
            var dstHost   = 'YOUR-ALLOW-HOST';
            var backToUrl = 'BACK-TO-URL';

            function checkHost(){
                var win = window.frames.YOUR-IFRAME-NAME;
                win.postMessage('checkHost', dstHost);
                    console.log('msg Sended');
                    clearInterval(timetoEnd);
                    timetoEnd = setInterval(function () {
                        window.location.href = backToUrl;
                    }, 5000);
                }

                function validHost(event) {
                    if (event.data == 'checkHostTrue') {
                        clearInterval(timetoEnd);
                        console.log('checkHostTrue');
                    } else {
                        return;
                    }
                }

                window.addEventListener("message", validHost, false);
                checkHost();

                setInterval(function () {
                    checkHost();
                }, 10000
                );
            });
    </script>

必须将它放入你的src iframe

<script>
            function receiveMessage(event)
            {
                if(event.data=='checkHost'){
                    event.source.postMessage("checkHostTrue",
                           event.origin);
                } else {
                    return;
                }
            }
            window.addEventListener("message", receiveMessage, false);
</script>

答案 5 :(得分:-1)

我知道这是一个有点老的话题,但我有你刚刚放在 <script> 标签中的代码,它应该可以防止大多数好奇的人从 iFrame 中查看 html 文件:

if(window.top.location.pathname === window.location.pathname){
history.back()
}