2011-01-19 125 views
3

我有以下幾個方面擁有.NET web應用共享會話cookie: www.domain.com sub.domain.com files.domain.com跨越兩個命名域

當用戶登錄到domain.com或sub.domain.com,我希望他們分享會話狀態(即一次登錄到兩個域)。這可以通過將會話coookie上的域設置爲「.domain.com」來完成。 但是,我的問題是,域名「files.domain.com」應該而不是由於安全問題(來自該域上託管的用戶創建的文件的xss攻擊是一個問題)而具有會話狀態。

是否有可能在ASP.NET中爲這兩個域使用相同的asp.net會話ID,但不是第三個?

在此先感謝!

回答

3

這裏有一對夫婦的浮現在腦海中的選項:

#1 - 發佈您的登錄請求通過一個客戶端腳本這兩個應用程序。這將使您能夠同時爲兩個有效域設置Cookie。這使您可以通過爲希望讓用戶進行身份驗證的特定域創建Cookie來避免您擔心的XSS問題。

#2 - 將您的「不安全」網站移動到不同的域。例如:www.domain-files.com。使用該選項,您可以使用共享cookie來管理身份驗證。

2

不要混淆會話cookie和表單身份驗證cookie。 ASP.NET會話不能在應用程序之間共享。就表單身份驗證cookie而言,它只是一個簡單的cookie,cookie的工作方式是設置domain屬性。

我能想到的一種方法是爲兩個應用程序在web.config中定義特殊的machineKeys。這樣,用戶上www.domain.com認證將被髮射,這將與www.domain.com MachineKeys的被加密,因爲只有sub.domain.com具有相同的密鑰將能夠解密該cookie的cookie。該cookie仍將被髮送到files.domain.com,但它將無法解密,並且用戶將不會在那裏進行身份驗證。

+0

它實際上是相同的應用程序,其中兩個域指向相同的應用程序/服務器+路徑。所以www.domain.com和sub.domain.com是平等的,而files.domain.com指向應用程序的不同虛擬文件夾。所以基本上我需要用戶同時在兩個域上進行身份驗證sessionId – 2011-01-19 11:19:36

0

試試這個: Sharing asp.net authentication on different apps on different sub-domains

如下文所述,只有匹配機鍵應用程序將能夠相互進行身份驗證。因此,假設files.domain.com被賦予了不同的計算機密鑰,將無法解密的會話cookie,並在那裏有其他領域無權

+0

謝謝,仍然不是我正在尋找不幸的。瀏覽器仍然會發送cookie,從而使得例如存儲在該域中的javascript文件攔截cookie - 爲其他域上的會話劫持提供入口點。 – 2011-01-24 11:24:43

0

也許,它會完成你的任務,以存儲GUID值在cookie中直接使用Response.Cookies,然後根據該值查詢數據庫以獲取共享認證信息。

+0

這就是我認爲的,直到我意識到單獨的cookie仍然可以用於XSS攻擊 – DeveloperChris 2011-01-28 01:41:51

+0

在Guid末尾添加一個標記,指示先前的請求標識。即當它是第43個請求時具有值「sessionid = {guidvalue} 43」的cookie。然後驗證請求號碼。 – smartcaveman 2011-01-28 07:15:00

1

在我看來,問題是爲什麼人們上傳可能包含XSS攻擊的文件?如果他們能做到這一點,他們可能會找到導致其他問題的方法。

最有可能的人選是你的登錄頁面上有發送憑據到其他服務器的JavaScript函數。所以當someoe登錄到一個域時,javascript函數會同時將它們記錄到另一個域中。

我同意喬。誰說移動files.domain.com到另一個域名,並完全避免這個問題。