6

無限ループに陥っているWebアプリケーションがあり、次にどこを見ればよいかわかりません。これはイントラネットサイトなので、共有できるリンクはありませんが、以下に考えられる限り多くの詳細をリストしました。アイデアや提案をいただければ幸いです。誰もが持っています。

詳細:

  • IIS 7
  • .Net 4.0
  • Windows 2008
  • デフォルトのドキュメントはLogin.aspxです
  • IISのアプリまたはLogin.aspxにHTTPリダイレクトが設定されていません
  • Fiddlerは、ステータスコード302を使用してLogin.aspxにリダイレクトするLogin.aspxを表示します。

サイトを開くと、Login.aspxを指し、302ループでスタックします。サイトを開いたがregister.aspxをポイントすると、Fiddlerはregister.aspxがLogin.aspxに移動することを示し、もちろんLogin.aspxにリダイレクトします。

私がしたこと:

  • VisualStudioからWebアプリを実行します-すべてが正常に機能します
  • web.configでリダイレクトコマンドを確認してください-何もありません
  • IISでリダイレクトコマンドを確認してください-何もありません
  • ループ内の別のページについてはFiddlerを見てください-何もありません。Login.aspxからLogin.aspxだけです。
  • Login.aspxでリダイレクトコマンドを確認してください-何もありません
  • Login.aspxコードビハインドでリダイレクトコマンドを確認してください-何もありません
  • サーバーからweb.configを使用して、ボックスでアプリを実行します-すべてが機能します
  • Login.aspxでリダイレクトコマンドを確認してください-何もありません
  • キャッシュをクリアしました-問題はまだ解決していません
  • 再公開-問題はまだ解決していません
  • 再公開およびクリアされたキャッシュ-問題は引き続き発生します
  • IISで無効にされたデフォルトドキュメント
4

3 に答える 3

5

それが私たちが抱えていた問題のように聞こえるので、それが答えである場合に備えてこれを共有します。

  1. [RequiresHttps]ログインアクションに属性を持つASP.netMVCサイト。

  2. SSLアクセラレーションを実行していたロードバランサーの背後(サーバー側のコードに実際にヒットするリクエストは、既にデコードされており、httpで効果的に実行されます)。

  3. サーバーコードはこれが問題であると判断し、httpsを使用して自身にリダイレクトします。

  4. すすぎ、繰り返します。


これが回答されてからかなり長い時間が経ちましたが、以下の「RequireHttpsを使用しない」という私のコメントはおそらく少し古くなっています。

この答えを見て、それが問題に答えると考える人は、X-Forwarded-Protoヘッダーを使用するようにロードバランサーを構成することを検討することをお勧めします。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto

次に、MVCサイトを設定して、これらを読み取り、環境の境界でHTTPSの下にあると見なすことができるようにします。

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-6.0

于 2012-07-02T14:55:55.730 に答える
2

問題が見つかりました。MasterPageでこのロジックを見つけました:

Dim strPage As String = Request.Url.AbsolutePath.Replace("/", "")
    'Check that user is logged in
    If Not strPage = "Login.aspx" And Not strPage = "Register.aspx" Then
        If Session("intUserId") Is Nothing Then
            Response.Redirect("~/Login.aspx", True)
        End If
    End If

明らかに、サーバーでLogin.aspxを参照する場合、strPageはLogin.aspxと等しくありません。

私がそれを調査していたとき、私はこれを捕まえるべきでした。コメントをありがとうロス、それは私がこれを見つけるのを助けました!

于 2012-07-02T15:27:54.307 に答える
1

私は同様のバグに遭遇しました。しかし、私のものは2つのResponse.Redirectを続けて使用するタイプミスでした 。

If (conditon1){
    Response.Redirect("Page1.aspx");
}
If (conditon2){
    Response.Redirect("Page2.aspx");
}

そして、修正は、elseブロックにifを置くだけでした。

于 2017-06-30T22:42:01.237 に答える