【问题标题】:preventing cross-site scripting in wtrealm防止 wtrealm 中的跨站点脚本
【发布时间】:2012-08-12 22:12:32
【问题描述】:

我们正在创建如下消息,即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 免受跨站脚本漏洞的影响,有人有什么建议吗?

【问题讨论】:

  • 有趣的问题。我手头没有 adfs,在我实际尝试之前,我想知道它会引入哪些安全问题(如果有的话)。

标签: c# security wif adfs ws-federation


【解决方案1】:

您需要的是 URL 编码。非字母数字字符需要替换为它们的 %xx(十六进制)表示...

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我们正在使用 StarterSTS/IdentityServer 实现。您会说这会带来与您在回答中提到的相同的风险吗?
    • identityserver 支持在其管理控制台(如 adfs)中为每个依赖方指定端点。他们还支持在登录请求中指定 wreply(通过打开默认关闭的配置设置),但不确定他们是否采取措施避免打开重定向/跨站点脚本。
    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 2011-02-16
    • 2015-04-01
    • 2021-10-17
    • 2014-05-25
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多