c# mvc を使用して、特定のアクションが ssl 経由で呼び出されていることを確認するにはどうすればよいですか?
たとえば、支払いページでは、サーバーで https/http が許可されていますが、アクセスするユーザーに https の使用を強制したいですか?
使用していない場合に https にリダイレクトする actionfilter のようなものを考えていますか?
それは正しいアプローチですか?
c# mvc を使用して、特定のアクションが ssl 経由で呼び出されていることを確認するにはどうすればよいですか?
たとえば、支払いページでは、サーバーで https/http が許可されていますが、アクセスするユーザーに https の使用を強制したいですか?
使用していない場合に https にリダイレクトする actionfilter のようなものを考えていますか?
それは正しいアプローチですか?
あなたの場合 [RequireHttp]
、ログイン Cookie をクリアすると、属性がうまくいくかもしれません。そうしないと、ネットワーク経由でクリア テキストで送信されます。それ以上のわずかなコストを回避する価値があるよりも多くの作業が必要になる可能性がありますHTTPS calls.
SO はすべて質問をリサイクルすることであり、あなたの質問を読んでいる他のユーザーは、ログイン後に HTTP にドロップダウンしても問題ないと思うかもしれません。
この[RequireHttps]
属性は、コントローラ タイプまたはアクション メソッドで使用して、 「これは SSL 経由でのみアクセスできる」ことを示すことができます。 コントローラーまたはアクションへの非 SSL 要求は、SSL バージョンにリダイレクトされるか (HTTP GET の場合)、拒否されます (HTTP POST の場合)。必要に応じて、RequireHttpsAttribute をオーバーライドして、この動作を変更できます。反対のことを行う組み込みの [RequireHttp] 属性はありませんが、必要に応じて独自の属性を簡単に作成できます。
プロトコル パラメータを取る Html.ActionLink() のオーバーロードもあります。プロトコルとして「http」または「https」を明示的に指定できます。そのようなオーバーロードの 1 つに関するMSDN ドキュメントを次に示します。プロトコルを指定しない場合、またはプロトコル パラメーターを持たないオーバーロードを呼び出す場合は、リンクに現在の要求と同じプロトコルを持たせたいと想定されます。
MVC に [RequireHttp] 属性がない理由は、あまりメリットがないからです。[RequireHttps] ほど面白くなく、ユーザーが間違ったことをするのを助長します。たとえば、多くの Web サイトは SSL 経由でログインし、ログイン後に HTTP にリダイレクトしますが、これは絶対に間違ったことです。ログイン Cookie は、ユーザー名 + パスワードと同じくらい秘密であり、ネットワーク上で平文で送信されます。その上、MVC パイプラインが実行される前に、ハンドシェイクを実行してチャネルを保護するための時間 (HTTPS を HTTP よりも遅くする原因の大部分) を既に取っているため、[RequireHttp] は現在の要求または将来の要求を作成しません。より速くリクエストできます。
そして2秒後、もちろんフレームワークの一部。