Javascript 如何禁用对Iframe的直接访问
假设我的用户通常通过 在这个网页中,我们有一个iframe,它实际上来自 一切都很好,只是如果出于某种原因,用户开始知道这个url。他们可以通过在地址栏中键入来直接访问它 这就是我想阻止他们做的事。是否有实现这一目标的最佳实践 ==更新以提供更多背景信息==== 父页面是公司的页面,由其他团队维护。因此,它们具有所有通用的页眉和页脚等,因此每个应用程序都被呈现为其中的iframe。(这也意味着我们无法更改父页面的代码) 如果用户直接访问,他们将无法看到页眉和页脚。是的,这没什么大不了的,但我只是想保持一致性 我关心的另一个问题是,在我们的开发环境中(即在本地运行页面时),我们没有父iframe。我们直接从中访问我们的页面。因此,我想找到一个解决方案,使我们能够在本地运行时正常访问它Javascript 如何禁用对Iframe的直接访问,javascript,jquery,iframe,Javascript,Jquery,Iframe,假设我的用户通常通过 在这个网页中,我们有一个iframe,它实际上来自 一切都很好,只是如果出于某种原因,用户开始知道这个url。他们可以通过在地址栏中键入来直接访问它 这就是我想阻止他们做的事。是否有实现这一目标的最佳实践 ==更新以提供更多背景信息==== 父页面是公司的页面,由其他团队维护。因此,它们具有所有通用的页眉和页脚等,因此每个应用程序都被呈现为其中的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数组)匹配。有关详细信息,请参阅我的答案。