2015-04-17 62 views
1

我們通常所說的我的用戶通過https://www.mycompany.com/go/mybusinessname如何禁用直接訪問的iFrame

訪問我們的網頁,這裏面的網頁,我們有實際上來自https://www.mycompany.com/myapp

一切正常,只是一個IFRAME如果由於某種原因,用戶來了解這個URL https://www.mycompany.com/myapp。他們可以通過在地址欄中輸入來直接訪問它。

這是我想阻止他們做的事情。有沒有最佳做法來實現這一目標?

====更新,以提供更多的背景====

父頁面這是https://www.mycompany.com是公司的頁面,它是由一些其他的團隊維護。所以他們擁有所有的通用頁眉和頁腳等等,因此每個應用程序都在其內部呈現爲一個iframe。 (這也意味着我們無法更改父頁面的代碼)

如果用戶直接訪問https://www.mycompany.com/myapp,他們將無法看到頁眉和頁腳。是的,這不是什麼大問題,但我只是想保持一致性。

我的另一個問題是,在我們的開發環境(也就是當在本地運行頁面時),我們沒有父-iframe的東西。我們直接從http://localhost:port訪問我們的頁面。因此,我想找到一個解決方案,可以讓我們在本地運行時也能正常訪問它。

如果這樣簡單的解決方案不存在,請讓我知道還有:)

+0

爲什麼這很重要? – Quentin

+0

使用Javascript驗證自己的IFRAME調用到外部父框架中。名義上這不會直接瀏覽(我說名義上是因爲有足夠的努力,任何事情都是可能的)。 – Lloyd

+0

[檢測iFrame在Javascript中的嵌入]可能的重複(http://stackoverflow.com/questions/925039/detect-iframe-embedding-in-javascript) – CBroe

回答

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); 
    } 
} 
+0

評估if == window.top和getLocation函數的語句是多餘的。 location.href已經返回URL幷包含路徑名。事實上,你的方式留下了一個安全漏洞。有人可以在他們的網站上僞造名爲/ go/mybusinessname的文件,並在iframe中打開「myapp」鏈接。您最安全的解決方案是評估整個網址並確保它與您公司的網址(或可接受的網址數組)匹配。詳情請參閱我的回答。 –

-1

您可以在服務器端使用HTTP referer頭。如果頁面在IFRAME中打開 - referer包含父頁面地址。否則,它是空的或包含不同的頁面。

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; 
}