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/)]}

メッセージの2番目のパラメーターがjavascriptであり、adfsがそれにリダイレクトすると、実際にアラートが表示されることに注意してください。

これは、ユーザーがログインしているときに発生し、同じセッション内で次のようにURLを入力しようとします

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

wtrealmこのクロスサイトスクリプティングの脆弱性を防ぐ方法について誰かが提案を持っていますか?

4

2 に答える 2

1

ここで必要なのはURLエンコードです。英数字以外の文字は、%xx(16進)表現に置き換える必要があります。

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「addstsreference」によって生成されたSTSは、トークンを送信するためのエンドポイントとしてwtrealmを使用します。これが開発STSであり、本番環境に対応していない理由です。

つまり、エンドポイントとしてwtrealmを使用するかどうかは、STSの実装に依存します。レルムをadfsなどのURLに関連付けるリポジトリが必要です。

于 2012-08-16T19:37:34.553 に答える