2009-08-11 75 views
2

我正在嘗試使用引用標頭檢查作爲縱深防禦(即許多安全技術中的一種,而單獨依賴任何一種安全技術)。HTTP_REFERER應該在用戶告訴瀏覽器「刷新」時填入?

似乎有時MSIE在刷新時不包括引用者。那是預期的行爲?無論如何,我可以檢測到刷新,所以我知道一個失蹤的推薦人是好的?

是的,我知道引用者可以用自定義瀏覽器欺騙。只是說,如果黑客想要破解我的小網站,他將需要投入時間來設置合適的推薦人。

+0

你想知道該頁面在客戶端還是服務器端刷新? – Freddy 2009-08-11 19:25:14

+0

@Freddy,客戶端刷新。我正在考慮在右鍵單擊使用MSIE的任何頁面時在上下文菜單中看到的「刷新」。 – MatthewMartin 2009-08-11 19:32:47

+0

偏執狂的人傾向於在瀏覽器中關閉引用者(在Opera中很容易,也可能在FireFox中)。即使這只是衆多措施中的一種,我真的不認爲依靠它來實現任何形式的安全。 – 2009-08-11 19:47:18

回答

2

鑑於rfc2616沒有精確地指定的「刷新」發生什麼事情(只提到引用站點:一定不能如果URI是從沒有自己的URI的來源獲得的發送),可能有一些變化性。但是,考慮到你在「安全」上下文中談話,我想知道你是否期待Referer:當從HTTPS訪問頁面轉到HTTP訪問頁面並進入重載時,第15.1.3節有一個具體的提到:

Clients SHOULD NOT include a Referer header field in a (non-secure) 
HTTP request if the referring page was transferred with a secure 
protocol. 

我不會信任引用者:從安全的角度來看。首先,因爲標準本身提到,這被認爲是可調整的(RFC2616,151頁):

The information sent in the From field might conflict with the user's 
privacy interests or their site's security policy, and hence it 
SHOULD NOT be transmitted without the user being able to disable, 
enable, and modify the contents of the field. The user MUST be able 
to set the contents of this field within a user preference or 
application defaults configuration. 

其次,從實際的角度,控制對與此字段修補例如對於Firefox,其位於about:config,network.http.sendRefererHeader中,例如,在here

如果想要發送任意引用標題,那麼「更多工作」僅僅是下載並啓動curl的問題,可以將引用者設置爲任何他們想要的。 ( - 提供者<URL>)。因此,試圖在任何類似安全性的處理中使用它是一個弱點。

+0

「更多工作」在IE之外的其他瀏覽器中實際上並不多。而且,IE瀏覽器可能會在7或8之中有這種選擇......我從來沒有實際使用它們超過一兩分鐘。 – Powerlord 2009-08-11 20:01:18

+0

我都沒有 - 這就是爲什麼我用捲曲給出的例子(除了可憐的「Referer:」也允許忘記處理cookie的無聊細節)。 – 2009-08-11 20:17:54

+0

我辦公室的政策是,我們從來沒有遇到過我們不喜歡的安全功能,即使它不是水密的,就像鎖住房子的門很容易扔磚頭一樣愚蠢通過玻璃窗 - 但人們仍然鎖門。 – MatthewMartin 2009-08-12 01:33:55

1

推薦人沒有設置書籤點擊或用戶輸入URL時。

在我看來,這也將保持刷新,因爲否則會看起來像你從一個鏈接得到一噸的傳入流量的,即使用戶只是簡單地單擊鏈接一次,然後按F5鍵一些的時代。

只是我的看法,但。這是一個不可靠的指標,主要取決於個人瀏覽器客戶端的行爲,通常可定製啓動。

2

刷新頁面通常會調用瀏覽器重新發送用於獲取當前頁面的請求。 (這也是你被問及是否要重發一個POST請求的原因。)因此,如果先前的請求已經包含一個Referer,則只會發送Referer。

0

大多數瀏覽器都會重新發送原始請求。這意味着如果原始請求包含引用者,則會包含引用者。

1

請注意,如果您導航到通過JavaScript的鏈接MSIE將不會發送引薦,這是一個已知的bug(即還沒有看到,因爲IE6開發的任何更新)

//e.g. this will not send the referer in IE 
location.href = 'somepage.html'; 

//and I believe it also affects 
location.reload();