asp.netの使用exlyesslであり、非SSLページでユーザーが認証されているかどうかを確認できます

StackOverflow https://stackoverflow.com/questions/4546682

質問

混合SSLを使用したWebApplication(ASP.NET 3.5)があります。すべてのアカウント関連ページはSSLを介して配信されます。ほとんどすべてのページは、非SSLを介して配信されます。 HTTPとHTTPを自動的に切り替えるには、使用します このコンポーネント. 。最近、非セキュアなWiFiネットワークでユーザーセッションをハイジャックする機能に関するニュース項目がありました。これは、非SSL接続を介して送信されるCookieをキャッチすることで可能です。

これにより、このWebApplicationでセキュリティの選択肢を確認するようになりました。私は(再び)つかみました この記事 MSDNから、試しました requiressl = true 私のフォームサテンテーションのプロパティ。 WebApplicationを開始する前に、この情報を含むCookieがWebbrowserから送信されていないため、User.Identityが非SSLページでnullになることに気付きました。

SSL接続を介してユーザーを認証するメカニズムが必要です...そして、非SSLページでさえ、この認証情報を覚えています。

そうしている間、私は見つけました この郵便受け. 。これは良い解決策だと思われます。しかし、セッションステートにログイン情報を保存する際にソリューションが見つかるのだろうか? Global.asaxでapplication_authenticaterequestをキャッチすることを考えています。接続が安全かどうかを確認し、AuthCookieまたはセッションのいずれかを確認します。私はまだこれをどのように実装するのか正確にはわかりません。多分あなたはこれについて私と一緒に考えることができますか?

役に立ちましたか?

解決

残念ながら、矛盾する要件があります。 SSL以外で安全なセッションを行うことはできないので、根本的な仮定に挑戦したいです。サイト全体でSSLを使用してみませんか?

他のヒント

SSLを使用しないための属性を求めるMVC FAQ(セキュリティの第一人者による回答)から。

•[requirehttps]属性は、コントローラータイプまたはアクションメソッドで使用して、「これはSSLを介してのみアクセスできます」と言うことができます。コントローラーまたはアクションへの非SSLリクエストは、SSLバージョン(HTTPが取得される場合)または拒否(HTTP投稿の場合)にリダイレクトされます。必要に応じて、requirehttpsattributeをオーバーライドしてこの動作を変更できます。反対のことを行う[requirehttp]属性が組み込まれていませんが、希望する場合は簡単に自分で作ることができます。

また、プロトコルパラメーターを取得するhtml.actionlink()の過負荷もあります。 「HTTP」または「HTTPS」をプロトコルとして明示的に指定できます。このような過負荷に関するMSDNドキュメントは次のとおりです。プロトコルを指定しない場合、またはプロトコルパラメーターを持たない過負荷を呼び出す場合、リンクが現在の要求と同じプロトコルを持つことを望んでいます。

MVCに[requirehttp]属性を持っていない理由は、それにあまり利益がないためです。 [requirehttps]ほど面白くなく、ユーザーが間違ったことをすることを奨励しています。たとえば、多くのWebサイトがSSLを介してログインし、ログインした後にHTTPにリダイレクトします。これは絶対に間違ったことです。ログインクッキーはユーザー名 +パスワードと同じくらい秘密です。これで、ワイヤー全体でクリアテキストで送信しています。それに加えて、MVCパイプラインが実行される前に、握手を実行してチャネルを確保し(HTTPよりもhttpsよりも遅くするものの大部分)、すでに時間をかけて時間をかけています。はるかに速くリクエストします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top