2014-12-18 51 views
0

情況:我們有一個小部件,我們希望允許在可信站點上使用iframed。爲了緩解潛在的點擊劫持攻擊,我們希望在小部件加載域名白名單時檢查引薦來源。不匹配=小部件禁用。可以僞造document.referrer嗎?

我知道使用Flash你可以用任何Referer頭髮送任意的HTTP請求。 document.referrer同樣容易受到攻擊嗎?

注:我知道用戶可以更改設置和其他情況可以使document.referrer爲空。沒事兒。小部件總是工作並不重要,因爲如果網站嵌入它不受信任,它就不起作用。

編輯:此時X-Frame-Options不起作用,因爲ALLOW-FROM沒有在Chrome或Safari中實現。我需要能夠支持第三方域名。

+2

有很多更好的方法。使用'x-frame-options'標題。 – meagar

+0

如果你有服務器檢查Referer頭部,或者Origin頭部,並且基於它設置X-Frame-Options,會不會好? – guest

+0

@這是一個很好的問題。我不清楚Flash漏洞是否延伸到用僞造標題加載iframe中的內容。 – noah

回答

1

衆所周知,您可以清除Referer頭和document.referrer,例如,通過來自數據URI。只要您不允許undefined document.referrer,這不會給攻擊者任何意外的訪問。

您還聲明瞭Flash可以使用受攻擊者控制的Referer標頭髮出請求的問題。但是,在這種情況下,他們將無法將響應呈現爲服務器源中的文檔。他們無法用這個做任何點擊劫持攻擊。儘管可能CSRF。

如果請求是由iframe發送的,那麼瀏覽器將發送正確的引用。


document.referrer一個小問題是,你必須要弄清楚它是從URL字符串什麼域。你必須小心你如何做到這一點。

2

是的。你可以從字面上做:

document.referrer = "http://foobar.com"; 

如果你只想讓您的網站上的受信任的站點進行的iframe,您使用X-Frame-Options HTTP響應頭。

MDN Developer article for X-Frame-Options

編輯:如果您需要在不完全支持的瀏覽器這項工作的X架,選項,那麼你需要更復雜的東西,從而使「外部」網站與服務器託管的通信iframed站點請求與客戶端IP地址綁定的單次使用令牌,並使用該令牌批准/拒絕訪問。

+0

好的,但如果我控制正在進行iframed的頁面,我不打算這樣做。對於其他域的X框架選項支持未在Chrome或Safari中實現。 – noah

+0

不同的威脅模型 – guest

+0

@noah如果進行嵌入的網站是您控制的網站,我已經更新了我的帖子,並提供了關於如何在沒有X-Frame-Options的情況下執行此操作的建議。 – PhonicUK