2013-08-01 13 views
1

我有一個page A它生成另一個page B's URL與查詢字符串包含加密授權信息訪問該page B寫cookie到客戶端本地機器在c#

當用戶使用該URL訪問page B時,我想將包含授權信息的cookie寫入用戶的本地機器。

我讀了MSDN參考,它確實提到了cookie可以通過請求和響應生成和讀取,但是有沒有辦法將cookie寫入特定位置?

在我生成我的cookie之前,是否還有一種方法可以檢查用戶本地計算機中是否存在現有cookie。

在此先感謝。

+1

頁面A和頁面B是否在同一個域名下(例如:www.example.com/PageA和www.example.com/PageB)? –

+0

不,它們不在相同的域名下。 – user1196284

+0

你想檢查和寫入頁面B的cookies嗎?我的閱讀是,當你訪問頁面B時,你想要檢查cookie是否存在,如果不存在,就寫一個。頁面A會參與到這個過程中,還是僅僅被討論了上下文? – Chris

回答

4

無法檢查或設置與執行請求的站點不在同一域中的Cookie。

您只能設置或讀取作爲設置Cookie的網站的Same Origin的Cookie。這是一種內置於HTML的安全功能,無法解決。

爲便於理解,爲什麼以此方式示例,您想www.myEvilSiteThatStealsYourData.com能夠讀寫www.theBankingWebsiteYouUse.com的Cookie嗎?

+0

嘿,那是我使用的銀行......同源策略是否僅適用於瀏覽器? –

+0

@Nate相同Origin被認爲是「cookie」規範的一部分,參見[4.1.2.3節'域屬性](http://tools.ietf.org/html/rfc6265#section-4.1.2.3)「*用戶代理將拒絕cookie,除非Domain屬性指定了包含原始服務器的cookie的範圍。*「因此,遵循rfc6265的任何內容也需要遵循相同原點策略。 –

0

頁面A中的Url應該包含對稱加密的加密的UserID和Timestamp(例如/ B?SecurityToken = blabla),頁面B必須解密安全令牌,驗證Timestamp不是太舊(1分鐘應該足夠),基於解密的安全令牌創建cookie。

更健壯的場景:一個(身份提供者)將用戶發送給B(服務提供者),沒有任何令牌; B檢查用戶在B域中是否具有身份驗證Cookie,如果他沒有,B將用戶重定向到A的單一登錄處理程序,如果用戶在A域中具有身份驗證Cookie,則A向B發送加密響應,提供有關用戶的信息(如UserID) A向用戶詢問憑證,如果它們正確A向B發送加密響應。B解密用戶ID並在B域中創建身份驗證Cookie。還有一些協議(SAML,OAuth) - 以類似的方式,您可以使用Facebook或Google爲您的應用程序提供身份提供程序。

+0

謝謝,Ondrei Svejdar。我瞭解風險。在我的情況下,我的兩個域名是相互關聯的,我完全可以控制他們兩個。通過在頁面AI中生成URL意味着生成URL並使用彈出窗口將其顯示給用戶,用戶需要手動複製此URL並打開瀏覽器,粘貼URL以導航到頁面B.是否會生成區別? – user1196284

+0

複製粘貼應該沒有什麼區別,我只是讓時間戳有效期較長(最少5分鐘)。 –

相關問題