Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何禁用对Iframe的直接访问_Javascript_Jquery_Iframe - Fatal编程技术网

Javascript 如何禁用对Iframe的直接访问

Javascript 如何禁用对Iframe的直接访问,javascript,jquery,iframe,Javascript,Jquery,Iframe,假设我的用户通常通过 在这个网页中,我们有一个iframe,它实际上来自 一切都很好,只是如果出于某种原因,用户开始知道这个url。他们可以通过在地址栏中键入来直接访问它 这就是我想阻止他们做的事。是否有实现这一目标的最佳实践 ==更新以提供更多背景信息==== 父页面是公司的页面,由其他团队维护。因此,它们具有所有通用的页眉和页脚等,因此每个应用程序都被呈现为其中的iframe。(这也意味着我们无法更改父页面的代码) 如果用户直接访问,他们将无法看到页眉和页脚。是的,这没什么大不了的,但我只是

假设我的用户通常通过

在这个网页中,我们有一个iframe,它实际上来自

一切都很好,只是如果出于某种原因,用户开始知道这个url。他们可以通过在地址栏中键入来直接访问它

这就是我想阻止他们做的事。是否有实现这一目标的最佳实践

==更新以提供更多背景信息====

父页面是公司的页面,由其他团队维护。因此,它们具有所有通用的页眉和页脚等,因此每个应用程序都被呈现为其中的iframe。(这也意味着我们无法更改父页面的代码)

如果用户直接访问,他们将无法看到页眉和页脚。是的,这没什么大不了的,但我只是想保持一致性

我关心的另一个问题是,在我们的开发环境中(即在本地运行页面时),我们没有父iframe。我们直接从中访问我们的页面。因此,我想找到一个解决方案,使我们能够在本地运行时正常访问它


如果这样的简单解决方案不存在,请告诉我:)

您可以在服务器端使用HTTP
referer
头。如果页面是在IFRAME中打开的,
referer
包含父页面地址。否则,它是空的或包含不同的页面。

在iframe的源上,您可以使用window.top.location检查父窗口,并查看是否将其设置为“”。如果没有,请重定向页面

var myUrl = 'https://www.mycompany.com/go/mybusinessname';

if(window.top.location.href !== myUrl) {
    window.top.location.href = myUrl;
}

我意识到我们已经有了一个函数来确定页面是否在运行。所以现在我只需要做下面的操作,在页面不是iframe时执行重定向

var expectedPathname = "/go/mybusinessname";
var getLocation = function (href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};
if (window == window.top) { // if not iframe
    var link = getLocation(window.top.location.href);
    if (link.pathname !== expectedPathname) {
        link.pathname = expectedPathname;
        window.top.location.replace(link.href);
    }
}

使用Javascript将IFRAME调用放入外部父帧中以验证自身。名义上,直接浏览是不可行的(我说名义上是因为只要付出足够的努力,任何事情都是可能的)。如果window==window.top和getLocation函数是冗余的,则可能会出现语句的重复。location.href已返回URL并包含路径名。事实上,你的方式留下了一个安全漏洞。有人可以在他们的网站上伪造名为/go/mybusinessname的文件,并在iframe中打开你的“myapp”链接。您最安全的解决方案是评估整个URL,并确保它与您的公司URL(或可接受的URL数组)匹配。有关详细信息,请参阅我的答案。