2011-12-26 16 views
12

Url.IsLocalUrlを使用して、認証アクションに渡された戻りURLがローカルであるかどうかを確認しています。 URLにフラグメントがない限り正常に動作します。つまり、 /t/test-team-3/tasks/lists/15はtrueを返しますが、/t/test-team-3/tasks#/lists/15はfalseを返します。URLにフラグメントが含まれていると、Url.IsLocalUrlがfalseを返すのはなぜですか?

これにはどのような理由がありますか?フラグメントに明白なセキュリティの問題がありますか?またはURLがローカルかどうかを確認する際にフラグメントを無視しても問題ありませんか?

答えて

20

このメソッドは内部的にUri.IsWellFormedUriStringメソッドを呼び出します。フラグメントを含む相対URLでこのメソッドを呼び出すと、falseを返します。 a bug on MS Connectは、理由によってで閉じられています。理由はです。

絶対URL(http/httpsなどのスキームを使用)でこのメソッドを使用すると、メソッドは予期したとおりに動作します。その理由は、UriクラスはHTTP URLだけでなく、HTTP URLでも動作するように意図されているからです。プロトコル(相対URL)を指定しないと、フラグメントを許可しない汎用URLパーサーが使用されます。

だから私はあなたが二つの可能性があると思い:とにかくあなたが相対URLでこのメソッドを呼び出している場合ので、方法

  • 呼び出す前に、フラグメントは、絶対URL(http://foo.com/t/test-team-3/tasks#/lists/15)上のメソッドを

    • ストリップを呼び出しそれがローカルURLであることが期待できます。
  • +3

    localhostでポートを使用してメソッドを呼び出すときに、他にも副作用がありますか? –

    関連する問題