2015-07-02 34 views
1

我在管理一個服務器,並一直在考慮爲我的cookies設置HttpOnly。在服務器端的Cookie上設置HttpOnly是否會影響在瀏覽器中創建的Cookie?

儘管我沒有任何在服務器和客戶端都有交互的cookie,但是爲所有cookie啓用此選項會阻止客戶端生成的cookie在隨後的頁面加載中被訪問?

爲了澄清,這將設置爲服務器選項。 我使用的是Apache,所以這將在Apache配置中是這樣的: Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

此外,問題是基於使用cookie進行數據存儲。 LocalStorage不在問題的上下文中,即使它是存儲純粹用於客戶端的數據的優越方法。

+2

什麼是「前端唯一cookie」?如果您不需要服務器上的信息,請不要使用cookie。改用'sessionStorage'或類似的東西。 – Bergi

+0

您是否測試過它並檢查它是否有效? – Anonymous

+0

當您在服務器上接收到「客戶端生成」Cookie時,是否將其發回給用戶?如果沒有,那麼你的Apache不會改變它們。 – Bergi

回答

2

是否啓用此選項以防止所有Cookie在後續頁面加載時被訪問客戶端生成的Cookie?

是的。 JS無法訪問服務器響應標記爲HttpOnly的Cookie的值,也無法向它們寫入新值。

我還沒有發現當JS嘗試寫入一個確切的情況時,瀏覽器似乎影響了http發送的本地存儲的只能由客戶端腳本訪問的。我不會依賴這種行爲,但寫作可能會被忽略。在舊版瀏覽器中,似乎只有http-only cookie被寫入的錯誤。

但是,沒有辦法啓用HttpOnly所有餅乾。您必須對每個交換的cookie單獨進行設置,因此只有服務器使用該標誌發送給客戶端的cookie才能啓用此選項。

因此,如果您要配置您的Apache以在所有即將發出的Cookie上啓用該標誌,則仍取決於您的服務器應用程序是否確實鏡像了客戶端發送的所有Cookie。通常它不會,並且只發送它想要設置的cookie(爲了自己,在服務器上使用)。

+0

你能訪問使用JavaScript創建的cookie,然後設置爲HttpOnly嗎? –

+0

不確定。 JS可能仍然可以訪問存儲在本地(在客戶端)的值,並與請求一起發送,但它確實無法訪問響應返回的新值。無論如何,你只是不應該「將客戶端創建的cookie設置爲httponly」:-) – Bergi

+2

在Chrome上進行測試。我在客戶端設置了一個cookie,重新加載了頁面,並能夠像平常一樣訪問cookie(未用httpOnly標記)。我也可以在服務器上訪問這個cookie(在我的例子中,PHP的'$ _COOKIE') 但是,當我在服務器端('setcookie')設置/更改Cookie的值並重新加載頁面時,chrome報告兩個具有相同名稱的cookie:一個使用httpOnly(設置爲新值),一個不使用(值設置客戶端)。服務器端使用服務器上設置的值的值,客戶端使用客戶端設置值。 – Sean

相關問題