2

我们正在创建一条消息,如下所示SignInRequestMessage

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这个跨站点脚本漏洞有任何建议吗?

4

2 回答 2

1

您在这里需要的是 URL 编码。非字母数字字符需要替换为它们的 %xx (hex) 表示...

https://example.com/StarterSTSLib/Login.aspx?wa=wsignin1.0&wtrealm=javascript%3aalert%28%2ftest%2f%29

于 2012-08-16T15:30:58.870 回答
1

像 ADFS 这样的生产就绪 STS 不依赖 wtrealm 回复令牌。管理 ADFS 的人将设置应用程序/依赖方并指定将令牌发布到的 ednpoint。

WIF“add sts reference”生成的STS会以wtrealm为端点发布token。这就是为什么它是一个开发 STS,而不是生产就绪。

简而言之,取决于 STS 实现是否使用 wtrealm 作为端点。您应该有一个将领域与诸如 adfs 之类的 URL 相关联的存储库。

于 2012-08-16T19:37:34.553 回答