SameSite属性がAsp.net_SessionID Cookieに自動的に追加される方法


20

最近samesite = laxがセッションCookieに自動的に追加されます!この属性は単にsessionIDに追加します。 "Set-Cookie ASP.NET_SessionId=zana3mklplqwewhwvika2125; path=/; HttpOnly; **SameSite=Lax**"

私のWebサイトはIIS 8.5、Windows 2012 R2でホストされており、WAFまたはUrlRewriteがなく、AntiVirus(kasper)をオフにしています。

しかし、まだいくつかの顧客サーバーで同じ問題があります。

何か案が?

編集: 私はこれを見つけます:https : //support.microsoft.com/en-us/help/4524419/kb4524419

ASP.NETは、HttpCookie.SameSite値が「なし」の場合にSameSite Cookieヘッダーを発行し、ChromeでのSameSite Cookie処理に対する今後の変更に対応します。この変更の一部として、FormsAuthおよびSessionState Cookieも、以前のデフォルトの「None」ではなくSameSite = 'Lax'で発行されますが、これらの値はweb.configでオーバーライドできます。

web.configでSessionStateの同じサイトのCookieを上書きするにはどうすればよいですか?この行を追加しましたが、SessionID Cookieでは機能しません! <httpCookies sameSite="Unspecified" />

編集:私はこれを見つけます:https ://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.sessionstatesection.cookiesamesite?view=netframework-4.8#System_Web_Configuration_SessionStateSection_CookieSameSite

SessionStateタグの「cookieSameSite」属性によって、stateserverのsamesiteを設定します。


「<sessionstate CookieSameSite "を追加して解決しましたか?4.8をインストールしましたが、IISマネージャーからsessionstateセクションにアクセスすると、認識されない属性を受け取ります
Jokies Ding

1
iisで同じメッセージを受信しますが、機能し、setcookie時間でsamesite値を変更します。cookieSameSite = "None"をweb.configに追加して、初期の動作を取得します。cookieSameSiteはcaseSesitiveであることに注意してください。
Sadegh、

4.5.2レガシーサイトにパッチを適用するだけでした。SameSiteは構成でサポートされていなかったため、Session_StartでCookieをインターセプトし、「SameSite = None; Secure」を追加して直接書き換える必要がありました。
ParanoidCoder

@ParanoidCoderはあなたの提案のためにあなたをタンクに入れます、私は.net 4.6.1を使用し、それは私のために機能します。しかし、私はあなたの解決策について質問があります:URL書き換え(IISの拡張)を使用するか、Session_Startのコードで書き換えます。コードを見せていただけますか?
サデー

回答:


19

sameSite = None、LaxまたはStrictのweb.configにこれらのオプションを追加します

<system.web>
    <httpCookies sameSite="None"/>
    <sessionState cookieSameSite="None" />
    <authentication mode="Forms">
        <forms cookieSameSite="None" />
    </authentication>

1
<httpCookies sameSite.NET Framework 4.8の有効なオプションとして表示されません
IronSean

4.6.1フレームワークで動作しますか?
Ankush Jain

@AnkushJain、いいえ、.Net Framework 4.7.2以降でサポートされています。
Vasiliy Zverev

11

UrlRewriteがすべての顧客サーバーにインストールされていないため、書き換えを使用できません。

最後に、cookieSameSiteをweb.configに追加します。

<sessionState mode="StateServer" cookieSameSite="None" sqlConnectionString="data source=(local);user id=sa;password=" cookieless="false" timeout="20" />


2
.net 4.7.2以降でのみ機能
mrlayeghi

1
私はそれを.net 4.6.1で使用しており、正常に動作します。
サデー

ここに述べたように、私はSadegh.K @申し訳ないが、それは4.7.2以前に動作しません:docs.microsoft.com/en-us/aspnet/samesite/...
cederlof

@cederlof私はこれを見つけました:support.microsoft.com/en-us/help/4533011/kb4533011
Sadegh

@Sadeghそうです、しかしそれはcookieSameSiteweb.configに機能を追加しません-.NET 4.7.2は追加します。コメントに投稿したリンクは、あなたが参照しているページからもリンクされています。
cederlof

8

CookieSameSite属性は、多くの古いフレームワークでは使用できません。受け入れられた回答が環境でサポートされていない状況にいる場合は、読んでください!

私はいくつかのSOの回答を変更してSameSite=None、セッションCookieに追加するこのURL書き換えを考え出し、ほとんどの互換性のないブラウザーのすべての Cookie SameSite=Noneから削除しました。この書き換えの目的は、Chrome 80より前の「レガシー」動作を維持することです。

Coder Frontlineブログの完全な記事

<rewrite>
  <outboundRules>
    <preConditions>
      <!-- Checks User Agent to identify browsers incompatible with SameSite=None -->
      <preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
        <add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
        <add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
        <add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
      </preCondition>
    </preConditions>

    <!-- Adds or changes SameSite to None for the session cookie -->
    <!-- Note that secure header is also required by Chrome and should not be added here -->
    <rule name="SessionCookieAddNoneHeader">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*ASP.NET_SessionId.*)" />
      <!-- Use this regex if your OS/framework/app adds SameSite=Lax automatically to the end of the cookie -->
      <!-- <match serverVariable="RESPONSE_Set-Cookie" pattern="((.*)(ASP.NET_SessionId)(=.*))(?=SameSite)" /> -->
      <action type="Rewrite" value="{R:1}; SameSite=None" />
    </rule>

    <!-- Removes SameSite=None header from all cookies, for most incompatible browsers -->
    <rule name="CookieRemoveSameSiteNone" preCondition="IncompatibleWithSameSiteNone">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=None)" />
      <action type="Rewrite" value="{R:1}" />
    </rule>
  </outboundRules>
</rewrite>

これはほとんどのASP .NetおよびASP .Net Coreアプリケーションで機能しますが、新しいフレームワークには適切なコードと構成オプションがあり、この動作を制御できます。上記の私の書き換えを使用する前に、利用可能なすべてのオプションを調査することをお勧めします。


これをMVC 5のどこに配置しますか?で<system.net></system.net>
Joel Wiklund

In<system.webServer>
zemien

注:ASP.NET_SessionId-cookieに既にある場合、SameSite=Laxこれは追加されるだけでSameSite=None置き換えられません。
cederlof

@zemienなぜ(SameSite=.*)?パターンがまったくないのですか?
cederlof

1
@cederlofあなたは正しい!私の環境はLaxプロパティを自動的に追加しない古い.Netフレームワークだったため、正規表現を適切にテストしませんでした。あなたのケースでは、SameSite=Laxヘッダーを除外するために別の正規表現を使用できます。((.*)(ASP.NET_SessionId)(=.*))(?=SameSite)更新されたregex101.com/r/7D9UdO/3を参照してください。ただし、この正規表現は、安全なヘッダーなど、後で必要なものをすべて除外することに注意してください。これはまれな状態であるため、重要な点は、OS + framework + appが何を出力しているかを確認し、それに合わせて正規表現を作成することです。両方の方法を反映するように答えを更新します:)
zemien

7

最終更新: ゼミエンの答え私のものよりも包括的で完全です。ユーザーエージェントに基づいてCookieを設定するためです。

私の答え:

次の方法で、web.configでASP.NET_SessionIdのSameSite = LaxをSameSite = Noneに置き換えることができます。

<rewrite>
  <outboundRules>
    <rule name="AddSameSiteCookieFlag">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="((.*)(ASP.NET_SessionId)(=.*))(SameSite=Lax)" />
      <action type="Rewrite" value="{R:1};SameSite=None" />
    </rule>
  </outboundRules>
</rewrite>

更新:IOSの問題 を防ぐために、

<action type="Rewrite" value="{R:1};SameSite=None" />

<action type="Rewrite" value="{R:1};" />

2
これは、IIS書き換えモジュールがサーバーにインストールされている場合にのみ可能です
Vincent Ducroquet

1
iOSの問題のアップデートは、新しいOSでも問題を引き起こします。基本的に、SameSiteヘッダーがない場合、一部のブラウザー/ OSはSameSite = Laxを割り当てます。唯一の方法は、UserAgentスニッフィングを行い、ヘッダーを含めるかどうかを決定することです。これがweb.configを介して実行できるか、Session_Startにコード変更を含める必要があるかについては、現在調査中です。
zemien

@zemienが書いた内容を強調するために、iOSのアップデートは1つの問題を修正しますが、別の問題を紹介します。
cederlof

3

@zemienあなたのソリューションは私たちのGoogle Chromeの問題を正しく解決しました

アプリケーションがサードパーティのiframeに埋め込まれている統合があります。2020年2月4日にリリースされたChromeバージョン80により、Cookieが読み込まれませんでした。

ただし、パターンを変更してすべてのCookieをキャプチャし、Secureフラグを追加し、ローカルのhttps以外の環境のlocalhostに書き換えを適用しないようにする必要がありました。

<rule name="SessionCookieAddNoneHeader">
      <match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)?" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
      <action type="Rewrite" value="{R:1}; SameSite=None; Secure" />
</rule>

1

私のために働く。私のweb.configファイルに追加:

<sessionState cookieSameSite="None"></sessionState>

.NET Framework 4.8 +インストールパッチへのアップグレード:2019-12 x64用Windows 10バージョン1909の.NET Framework 3.5および4.8の累積的な更新(KB4533002)

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