如何禁用对iframe的直接访问

时间:2015-04-17 08:52:38

标签: javascript jquery iframe

假设我的用户通常会通过https://www.mycompany.com/go/mybusinessname

访问我们的网页

在此网页中,我们有一个实际来自https://www.mycompany.com/myapp

的iframe

一切正常,但如果出于某种原因,用户会了解此网址https://www.mycompany.com/myapp。他们可以通过在地址栏中输入来直接开始访问它。

这是我想阻止他们做的事情。有没有最佳实践来实现这一目标?

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

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

如果用户直接访问https://www.mycompany.com/myapp,他们将无法看到页眉和页脚。是的,这不是什么大问题,但我只是想保持一致性。

我关心的另一个问题是,在我们的开发环境中(也就是在本地运行页面时),我们没有parent-iframe。我们直接从http://localhost:port访问我们的页面。因此,我想找到一个解决方案,允许我们在本地运行时正常访问它。

如果这种解决方案不存在,请告诉我:)

3 个答案:

答案 0 :(得分:4)

在iframe的源代码中,您可以使用window.top.location检查父窗口,看看它是否设置为“https://www.mycompany.com/go/mybusinessname”。如果没有,请重定向页面。

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

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

答案 1 :(得分:0)

我意识到我们已经有了一个函数来确定页面是否在https://www.mycompany.com下运行。所以现在我只需要执行以下操作,当我们的页面不是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);
    }
}

答案 2 :(得分:-1)

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