2012-08-16 83 views
2

我們正在建立的消息像以下這是一個SignInRequestMessage防止跨站點腳本在wtrealm

var message = Microsoft.IdentityModel.Protocols.WSFederation.WSFederationMessage.CreateFromUri(Request.Url); 

它具有以下性質:

Microsoft.IdentityModel.Protocols.WSFederation.SignInRequestMessage

Action: "wsignin1.0"

message.Parameters

Count = 2 
    [0]: {[wa, wsignin1.0]} 
    [1]: {[wtrealm, javascript:alert(/test/)]} 

注意消息中的第二個參數是一個javascript,當adfs重定向到它時,我們實際上看到了警報。

這種情況發生在用戶登錄,並在同一會話中,我們嘗試輸入URL像下面

https://localhost/StarterSTSLib/Login.aspx?wa=wsignin1.0&wtrealm=javascript:alert(/test/) 

有沒有人對我們如何避免這種跨站點腳本漏洞的wtrealm什麼建議嗎?

+0

有趣的問題。我手頭沒有adf,在我真正嘗試之前,我不知道可以引入哪些安全問題(如果有的話)。 – 2012-08-16 15:03:12

回答

1

生產準備STS不依賴於wtrealm回覆令牌回來。管理ADFS的人將設置應用/信賴方並指定令牌發佈到的ednpoint。

WIF生成的STS「添加sts引用」將使wtrealm作爲終端發佈令牌。這就是爲什麼它是一個發展STS,而不是生產準備。

簡而言之,取決於使用wtrealm作爲端點的STS實現。你應該有一個存儲庫,可以像adfs那樣與url相關聯。

+0

我們使用StarterSTS/IdentityServer實現。你會說這與你在答案中提到的風險相同嗎? – VoodooChild 2012-08-16 20:15:54

+0

identityserver支持在adfs等管理控制檯中指定每個依賴方的端點。他們還支持在登錄請求中指定wreply(通過打開默認情況下關閉的配置設置),但不確定他們是否執行某些操作以避免打開重定向/跨站點腳本。 – woloski 2012-08-17 00:41:13