2012-01-10 261 views
4

我知道cookie是如何工作的,只是開始挖掘爲什麼Codeigniter不會在SESSION中存儲生成的csrf標記,它只是存儲在cookie中。關心安全性,我開始考慮php setcookie()函數參數,如路徑和域。我問過自己是否有可能從另一個域名,某個'www.evilsite.com'設置'evil_cookie'的路徑='/'和domain ='www.goodsite.com'?另一個問題是,在向www.goodsite.com發出請求時,'evil_cookie'會被髮送到'www.goodsite.com'嗎?瀏覽器在請求時如何知道發送給服務器的cookie?

所以,我做了一個測試。我心中已經創建了「set_cookie.php」文件,並將其上傳到一些「www.evilsite.com」:

setcookie('evil_cookie', 'gotcha', time() + 60 * 30, '/', 'www.goodsite.com'); 

我使用Firefox和螢火蟲+的Cookie插件查看發送和接收的cookie。所以,在收到「www.evilsite.com/set_cookie.php」的請求後,我確實收到了'evil_cookie'。但是,cookie未保存(至少在firebug cookie插件面板中查看時沒有這樣的cookie)。當再次請求「www.evilsite.com/set_cookie.php」時,它也不會被髮送。剛剛收到但未保存。

從Firefox瀏覽器的角度來看,僅保存當前域的cookie是合乎邏輯和安全的。恕我直言,那些設置cookie()參數,如路徑和域主要是用於管理當前域及其子域的cookie,但不適用於外部域。我有點沮喪,我無法找到有關php.net的相關信息,所以我不確定它是一個瀏覽器相關的行爲,並具體說明它是如何處理「第三方cookie」或它更多的是一個標準?所有瀏覽器的行爲是否相同?如果有任何可靠和可靠的來源,請分享。

這也與cookie的另一個用途有關 - 存儲會話數據(不使用PHP本機會話,例如Codeigniter這樣做)。所以,如果所有的瀏覽器都不允許使用除當前域以外的安全cookie,那麼就沒關係。然而,它不能保護CSRF,因爲'www.evilsite.com'可能包含邪惡的JavaScript代碼,當用戶執行並從'www.evilsite.com'收到請求時,它將直接在客戶端上創建'evil_cookie'。

+0

文檔中的'$ domain'表示像'/ forum /'這樣的相對路徑,而不是整個url。 – OptimusCrime 2012-01-10 15:47:05

+0

我不同意。對於那些東西是'路徑'參數。域名是完整的域名或子域名。檢查出php.net – Centurion 2012-01-10 17:09:41

回答

1

[...]是有可能從另一個域設定 'evil_cookie' 與路徑= '/' 和域= 'www.goodsite.com',從一些 'www.evilsite.com'?

號,用戶代理應該忽略的Set-Cookie指令與屬性不domain-match當前請求的域:

的用戶代理將拒絕Cookie,除非域屬性 指定該cookie的範圍將包括來源 服務器。例如,用戶代理將接受來自「example.com」的 域屬性或來自 foo.example.com的「foo.example.com」的cookie,但用戶代理將不接受具有 的cookie 「bar.example.com」或「baz.foo.example.com」的域屬性。

這樣的cookie甚至不會被用戶代理接受。 路徑安全屬性類似適用。

有關屬性值如何由用戶代理解釋的示例,另請參見How do browser cookie domains work?

3

Cookie受限於same origin policy:一個網站只能爲自己的域名寫入和讀取cookie。

+0

因此,setcookie()中的域參數僅用於管理當前域及其子域的cookie可用性嗎? – Centurion 2012-01-10 15:51:08

+0

-1你錯了。您可以在'www.example.com'中的'example.com'中設置一個cookie。 – Gumbo 2012-01-10 16:02:47

2

只有當您發現了alredy時才能爲當前域或其子域設置Cookie(否則,任何人都可以替換其他人的cookie;隨之出現混亂)。這由瀏覽器強制執行:如果您嘗試從服務器端爲其他域設置cookie(使用HTTP標頭),瀏覽器將忽略該cookie。如果您嘗試從客戶端執行相同的操作(使用Javascript),same origin policy將阻止您這樣做。

因此,www.evilsite.com可以使用Javascript爲其自己的域設置Cookie,但這不是問題:它可以使用HTTP標頭來完成。這裏沒有新的攻擊媒介。

相關問題