瀏覽器Cookie策略

瀏覽器所持有的Cookie分爲兩種:一種是"Session Cookie", 又稱作“臨時Cookie”;另一種是“Third-party Cookie”,也稱爲“本地Cookie”。

兩者的區別在於,Third-party Cookie是服務器在Set-Cookie時指定了Expire時間,只有到了Expire時間後Cookie纔會消失,所以這種Cookie會保存在本地;而Session Cookie則沒有指定Expire時間,所以瀏覽器關閉後,Session Cookie就消失了。Session Cookie保存在瀏覽器進程的內存空間中,而Third-party Cookie則保存在本地。

如果瀏覽器從一個域的頁面中,要加載另一個域的資源,由於安全原因,某些瀏覽器會阻止Third-party Cookie的發送。

下面這個例子,演示了這一過程。

在http://www.a.com/cookie.php中,會給瀏覽器寫入兩個Cookie:一個爲Session Cookie,另一個爲Third-party Cookie。

<?php
header("Set-Cookie: cookie1=123;");
header("Set-Cookie: cookie2=456;expires=Thu, 01-Jan-2030 00:00:01 GMT;", false);
?>

訪問這個頁面,發現瀏覽器同時接收了這兩個Cookie。

這時再打開一個新的瀏覽器Tab頁,訪問同一個域中的不同頁面。因爲新Tab頁在同一個瀏覽器進程中,因此Session Cookie將被髮送。

此時在另一個域中,有一個頁面http://www.b.com/csrf-test.html,此頁面構造了CSRF以訪問www.a.com。

<iframe src="http://www.a.com" ></iframe>

這時卻會發現,只能發送出Session Cookie,而Third-party Cookie被禁止了。

這是因爲IE出於安全考慮,默認禁止了瀏覽器在<img>、<iframe>、<script>、<link>等標籤中發送第三方Cookie。

在Firefox中,默認策略是允許發送第三方Cookie的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章