2010-01-12 65 views
1

假設您有一個Web應用程序,它爲用戶提供了自己的子站點上的站點(例如:awesome.super-cms.com),並允許他們編輯HTML。進一步假設你在通配符子域Cookie中設置SessionID(「*.super-cms.com」)。是否可以使用JavaScript + Cookies欺騙會話?

誰管理evil.super-cms.com可以很容易地編寫從其他super-cms.com用戶抓住的SessionID一個JavaScript的用戶:

var session = $.cookie('SessionID'); 
// Now send `session` to evil.com 

我的問題是:可能攻擊用戶這些收穫SessionIDs做壞事?例如,作爲另一個用戶的欺騙認證?

回答

4

是的,他們可以。這傢伙似乎有一篇文章概述了例子:http://skeptikal.org/2009/11/cross-subdomain-cookie-attacks.html

您可以設置cookie的域來防止這種情況。它被設置爲cookie內的;domain=...,您的給定語言可能有直接執行此操作的功能。

+0

謝謝。我們使用的是Django,它允許您設置SESSION_COOKIE_DOMAIN來執行此操作。但是,這是一個不幸的情況,因爲我們真的希望讓用戶在不同子域之間進行身份驗證。 – 2010-01-12 05:07:22

+0

Kyle:你仍然可以在域之間進行身份驗證,但只需要多做一點工作(確保所有到其他域的鏈接都包含一個特殊的查詢字符串,然後進行適當的驗證(這比較複雜,但這是一般想法,或者至少是類似的))。你*不需要*,他們訪問彼此的cookies。 – 2010-01-12 05:09:11

0

攻擊者是否可以使用這些收穫的SessionID來做壞事?

是的,但它是一個沒有腦子,以防止這種情況:

  • 不使用通配符餅乾
  • 設置http唯一標誌上的任何cookie

我認爲你在SSL上運行它(否則它已經對MITM攻擊開放了),在這種情況下,設置SSL only標誌也是一個好主意。

請注意,您不能依賴客戶端IP地址不會更改(某些ISP使用負載平衡代理)中間會話,但瀏覽器標頭不會更改 - 但是這不會幫助某人的攻擊誰知道他們在做什麼。

C.