2009-01-29 42 views
2

這裏的快速版本我的問題:
是否可以爲您擁有的網站/服務器設置Cookie?

是否有可能以某種方式設置cookie到客戶端的瀏覽器時,cookie是與不同的服務器(在這種情況下,Exchange郵件服務器)使用?在這種情況下,嘗試設置cookie的服務器位於「intranet.myschool.edu」,交換服務器位於「owa_server.myschool.edu」。


下面是完整的問題:

我有一個使用捲曲,使一個HTTP POST到具有表單啓用基於身份驗證我們的Exchange服務器的PHP腳本。

當我成功的HTTP POST(其中包括髮布的URL中的用戶/密碼)時,Exchange Server(或更具體地說,https://my.school.edu/exchweb/bin/auth/owaauth.dll文件)輸出cookie。 具體來說,它輸出「sessionid」和「cadata」ID。

通過將這些cookie ids寫入服務器上的文本文件,cURL/PHP可以引用它,然後從Exchange/OWA服務器請求數據(通過webdav等)。

該部分工作。 我想解決的問題是現在將Cookie ID傳遞給客戶端瀏覽器,以便他們可以使用這些cookie ID自動登錄到他們自己的OWA帳戶。

實質上,我希望我們的用戶使用他們的Active Directory ID登錄到我們的Intranet,並查看他們最近的電子郵件的快照。然後,如果他們需要,我會給他們一個小鏈接來切換到完整的OWA Web應用程序。發生此切換時,我不希望他們必須手動登錄到OWA。由於他們已經在Intranet的前端提交了Active Directory用戶名和密碼,我希望他們能夠自動登錄到OWA中。

我應該注意,使用Windows身份驗證嘗試單點登錄是不可能的,因爲我們有Mac OS,Windows和Linux的組合。

我曾想過我可以做一個「setcookie」,並分配cURL得到的cookie id並將它們放到客戶端瀏覽器中。

這不可能嗎?是否無法通過這種方式「欺騙」Exchange/OWA(或任何其他網站)? 我有cURL捕獲的合法cookie ID。有沒有辦法將這些傳遞給另一臺計算機上的客戶端瀏覽器?

在最糟糕的情況下,使用Javascript將用戶名和密碼自動粘貼到OWA登錄頁面是我唯一的希望嗎? 有沒有人有任何其他想法如何避免我的Exchange/OWA的雙重登錄問題?

感謝您提供的任何幫助!

回答

1

我認爲這將是一個嚴重的安全漏洞,如果它是可能的...

3

可能能夠設置一個cookie以「.myschool.edu」的域部分。理論上,這些信息會發送到位於「myschool.edu」子域下的任何其他網站。

然而,在實踐中,您的客戶端軟件可能會認爲cookie的範圍過寬,並拒絕將其發回。

5

RFC 2965(NB HDN =「主機域名)

主機A的名稱在域上匹配主機B的 如果

* their host name strings string-compare equal; or 

    * A is a HDN string and has the form NB, where N is a non-empty 
    name string, B has the form .B', and B' is a HDN string. (So, 
    x.y.com domain-matches .Y.com but not Y.com.) 

注意域匹配是不是 交換操作: abccom
domain-matches .c.com,but not the reverse。

所以使用.myschool.edu作爲域應該工作。 NB領先。是必不可少的

+0

與Alnitak上面的答案重疊:( – barrowc 2009-01-29 22:19:19

0

您的瀏覽器可以決定...但通常不會,你不能。這被認爲是一種XSS漏洞。

1

在這種情況下,嘗試設置cookie的服務器位於「intranet.myschool.edu」,交換服務器位於「owa_server.myschool.edu」。

你應該能夠做到這一點。

我做這在我的網站(我將更改名稱爲示例的目的):

我在URL

webapp.domain.com

一個Web應用程序

當用戶登錄時,我設置的PunBB論壇包,它是在餅乾:

forum.domain.com

通過設置/清除PunBB論壇cookie,我可以自動登錄/註銷我們的用戶在他們的論壇賬戶上(爲了方便起見,當然假設註冊是同步的,在我的情況下,我刪除了論壇註冊和主站點註冊爲用戶創建論壇帳戶)。

您需要做的只是在子域1中將cookie路徑設置爲「/」(默認值),並將cookie域設置爲「domain.com」。然後,您在子域#2中的應用程序應該會看到Cookie。

編輯:我看到barrowc已經回答了,我見過一些例子中,「.domain.com」的格局,我的網站使用‘domain.com’的cookie域,它也能工作(也許PHP set_cookie如果缺少,添加前導點?)

+0

RFC 2965的第3.2.2節說:「Domain屬性的值指定cookie有效的域如果明確指定的值不以點開頭,用戶代理提供了一個領先的點「 – barrowc 2009-01-30 00:13:00

0

您可以使用iframe來設置cookie,即。在您的Web服務器上有一個iframe,它向交換http服務器(https://my.school.edu/exchweb/)上的頁面發出請求,並將您想要的cookie變量設置爲get或post變量。然後使用變量設置該域的cookie,並將用戶重定向到交換服務器。

現在,在OWA的後端可能會有邏輯檢查IP地址,用戶代理等。當註冊會話,可能會使此無效.....不確定

0

我們一直在努力爭取這個難幾個月,我們可以提出的最好的是允許Web服務器在每次都獲得cookie的cookie登錄。問題是,沒有cookie關聯性,我們沒有辦法確保Web服務器獲取的cookie來自客戶端連接的相同負載平衡節點。

相關問題