ASP.NETセッションCookieにセキュアフラグを設定するにはどうすればよいですか?


146

ASP.NETセッションCookieにセキュアフラグを設定して、HTTPSのみで送信され、プレーンHTTPでは送信されないようにするにはどうすればよいですか?

回答:


127

2つの方法があります。1つのhttpCookies要素でweb.configオンにできますrequireSSL、SSLのみのセッションとフォーム認証内のセッションを含むすべてのCookieのみを送信が、httpcookiesでSSLをオンにする場合は、フォーム設定内でもオンにする必要があります。

明確にするために編集します。 これを入れます<system.web>

<httpCookies requireSSL="true" />

13
+1明確にするために、これをweb.configに追加して、認証Cookieのセキュアフラグをtrueに設定する必要があります<httpCookies requireSSL="true" />
Tr1stan

8
これは(サーバーレベルの)構成に依存することに注意してください。「アプリケーションは安全なCookieを発行するように設定されています。これらのCookieはブラウザがSSL(httpsプロトコル)経由でリクエストを発行する必要があります。ただし、現在のリクエストはSSL経由ではありません。」というエラーでテスト領域を下げました。これは、リバースプロキシがあり、ブラウザがSSL経由で接続しているが、IISサーバーへのリバースプロキシはポート80を経由しているため、アプリケーションはセキュリティで保護されているとは考えていなかったためです。
mlhDev 2014年

4
@Bargitta Application_PreSendRequestHeadersイベントを処理し、特定のアプリケーション設定がtrueの場合、すべての Cookieを保護するように設定しました。このアプリ設定は、HTTPS外部サイトに対してのみ設定されます。
mlhDev 2015年

わかりましたので、すべての外部サイトはHTTPSを使用します。
Bargitta 2015年

IIS7 system.webがsystem.webserverに置き換えられた後、他の場所で見たので、この設定をそこに入れてみました。IIS 8.5では、これにより構成エラーが発生しましたが、system.webセクションを構成ファイルに追加し、そこに設定を配置すれば、すべてうまくいきました。
Eborbob 2017年

181

では<system.web>要素、次の要素を追加します。

<httpCookies requireSSL="true" />

ただし、ブロックに<forms>要素がある場合system.web\authentication、これはの設定をオーバーライドhttpCookiesし、デフォルトに戻しますfalse

その場合、requireSSL="true"フォーム要素にも属性を追加する必要があります。

だからあなたは次のようになります:

<system.web>
    <authentication mode="Forms">
        <forms requireSSL="true">
            <!-- forms content -->
        </forms>
    </authentication>
</system.web>

これらの要素のMSDNドキュメントについては、ここここを参照してください。


2
'lockItem'属性を含めることにより、他のweb.config設定が<httpCookies requireSSL = "true" />設定を上書きすることを回避できます。そのように:<httpCookies requireSSL = "true" lockItem = "true" />。詳細はこちらdotnetnoob.com/2010/11/how-to-secure-aspnet-cookies.html
JTech

1
さらに、roleManager要素がある場合は、その属性cookieRequireSSL="true"もtrueに設定する必要があります。参照 msdn.microsoft.com/en-us/library/...
ジェフMergler

上記の変更を関連ファイルに追加すると、セッションオブジェクトがアプリケーションで機能せず、nullになります。どうすればこの問題を修正できますか?
サティア

アプリにHTTPまたはHTTPSを使用していますか?ここで設定する「安全な」フラグにより​​、暗号化されていない(つまりHTTP)接続を介してCookieが送信されなくなります
Martin Eden

21

エンタープライズ環境でチェックインされたコードについて話していると、事態はすぐに乱雑になります。最善の方法は、web.Release.configに以下を含めることです。

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
  <authentication>
      <forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
  </authentication>
</system.web>

この方法では、開発者は影響を受けず(デバッグで実行)、リリースビルドを取得するサーバーのみがCookieをSSLにする必要があります。


^^^これが^^^です。詳細:re.Web.Config
Jeff Mergler

0

secure-この属性は、リクエストがHTTPSなどの安全なチャネルを介して送信されている場合にのみCookieを送信するようブラウザに指示します。これにより、暗号化されていない要求が渡されることからCookieが保護されます。HTTPとHTTPSの両方でアプリケーションにアクセスできる場合、Cookieをクリアテキストで送信できる可能性があります。


0

@Mark Dの回答に基づいて、web.config変換を使用して、さまざまなCookieをすべてセキュアに設定します。これには、設定anonymousIdentification cookieRequireSSLとが 含まれますhttpCookies requireSSL

そのためには、web.Release.configを次のように設定します。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
  </system.web>
</configuration>

ASP.NET Membership Provider(私は知っている、それは古くからある)でロールとフォーム認証を使用している場合はroleManager cookieRequireSSLforms requireSSL属性も安全必要があります。その場合、web.release.configは次のようになります(上記に加えて、メンバーシップAPIの新しいタグ)。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
    <roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
    <authentication>
        <forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    </authentication>
  </system.web>
</configuration>

ここでのweb.config変換の背景:http : //go.microsoft.com/fwlink/? LinkId=125889

明らかに、これはOPの元の問題を超えていますが、すべてをセキュリティで保護するように設定しないと、セキュリティスキャンツールが気づき、レポートに赤いフラグが表示されることを期待できます。どうやって知っているか聞いてください。:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.