उसी तरह से मेरे Asp.net_SessionID कुकी को स्वचालित रूप से कैसे जोड़ा जाता है?


20

हाल ही में samesite = lax अपने सत्र कुकी के लिए स्वचालित रूप से जोड़ें! यह विशेषता सिर्फ sessionID में जोड़ें: "Set-Cookie ASP.NET_SessionId=zana3mklplqwewhwvika2125; path=/; HttpOnly; **SameSite=Lax**"

मेरी वेबसाइट आईआईएस 8.5, विंडोज 2012 आर 2 पर होस्ट की गई है, और न ही WAF या UrlRewrite है और मैं एंटी वायरस (कैस्पर) बंद कर देता हूं।

लेकिन अभी तक कुछ ग्राहक सर्वरों पर समान समस्या है।

कोई उपाय?

संपादित करें: मुझे यह पता है: https://support.microsoft.com/en-us/help/4524419/kb4524419

ASP.NET अब एक हीसाइट कुकी हेडर का उत्सर्जन करेगा जब HttpCookie.SameSite मूल्य क्रोम में समीसाइट कुकी हैंडलिंग के आगामी परिवर्तनों को समायोजित करने के लिए 'कोई नहीं' है। इस परिवर्तन के भाग के रूप में, FormsAuth और SessionState कुकीज़ को 'कोई नहीं ’के पिछले डिफ़ॉल्ट के बजाय SameSite =' Lax’ के साथ भी जारी किया जाएगा, हालाँकि ये मान web.config में ओवरराइड किए जा सकते हैं।

मैं web.config में SessionState के लिए samesite कुकीज़ को कैसे ओवरराइड कर सकता हूं? मैं इस लाइन को जोड़ता हूं, लेकिन यह SessionID कुकी पर काम नहीं करता है! <httpCookies sameSite="Unspecified" />

EDITED: मुझे यह पता है: https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.sessionstatesection.cookiesamesite?view=netframework-4.8#SS_Web_Configuration_SessionStateSection_CookieSameSite

SessionState टैग की "कुकीसमीसाइट" विशेषता के द्वारा राजनेता के लिए सेटमेसिट सेट करें।


क्या आपने इसे "<सेशनटेड कुकीसमीसाइट" जोड़कर हल कर लिया है? मैंने 4.8 स्थापित किया है, लेकिन जब मैं आईआईएस मैनेजर से
सेशनस्टेट

1
मैं iis में एक ही संदेश प्राप्त करता हूं, लेकिन यह काम करता है और सेट-कुकी समय में samesite मान को बदलता है। मैं अपने वेब के लिए cookieSameSite = "कोई नहीं" जोड़ता हूँ। ध्यान दें कि cookieSameSite केससेसेटिव है।
सदिघ

मुझे इसके लिए सिर्फ 4.5.2 विरासत वाली साइट को पैच करना था - सेमसाइट को कॉन्फिगर्स द्वारा सपोर्ट नहीं किया गया था इसलिए मुझे कुकी को सत्र_स्टार्ट में इंटरसेप्ट करना था और इसे सीधे "सेमसाइट = कोई नहीं; सिक्योर" के साथ फिर से लिखना था।
ParanoidCoder

@PranoidCoder टैंक आप अपने सुझाव के लिए, मैं .net 4.6.1 का उपयोग करें और यह मेरे लिए काम करता है। लेकिन मेरे पास आपके समाधान के बारे में एक प्रश्न है: आप URL रीराइट (IIS का विस्तार) का उपयोग करते हैं या आप इसे Session_Start में कोड द्वारा फिर से लिखते हैं, क्या आप मुझे अपना कोड दिखा सकते हैं?
साडेघ

जवाबों:


19

इन विकल्पों को web.config के लिए समान में जोड़ें = कोई नहीं, लैक या स्ट्रिक्ट

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

1
<httpCookies sameSite.Net फ्रेमवर्क 4.8
आयरनसैन

क्या यह 4.6.1 फ्रेमवर्क के लिए काम करता है?
अंकुश जैन

@AnkushJain, नहीं, यह .Net फ्रेमवर्क 4.7.2 के बाद से समर्थित है।
वासिली ज्वेरेव

11

मैं फिर से उपयोग नहीं कर सकता, क्योंकि UrlRewrite मेरे सभी ग्राहकों के सर्वर पर स्थापित नहीं है।

अंत में मैं अपने 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 में उपयोग करता हूं और यह ठीक काम करता है।
साडेघ २ S

मुझे क्षमा करें @ Sadegh.K, लेकिन यह 4.7.2 से पहले काम नहीं करेगा जैसा कि यहाँ कहा गया है: docs.microsoft.com/en-us/aspnet/samesite/…
cederlof

: @cederlof मैं इस पाया support.microsoft.com/en-us/help/4533011/kb4533011
सादेग

@Sadegh राइट, लेकिन यह वेब के लिए cookieSameSiteकार्यक्षमता नहीं जोड़ता है ।config - .NET 4.7.2 करता है। मैंने अपनी टिप्पणी में जो लिंक पोस्ट किया है, वह आपके द्वारा संदर्भित पृष्ठ से भी जुड़ा हुआ है।
cederlof

8

CookieSameSite विशेषता कई पुराने फ्रेमवर्क के लिए उपलब्ध नहीं है। यदि आप उस स्थिति में हैं जहाँ स्वीकृत उत्तर आपके वातावरण में समर्थित नहीं है, तो पढ़ें!

मैंने इस URL को फिर से लिखने के लिए कई SO उत्तरों को संशोधित किया है जो SameSite=Noneसत्र कुकीज़ को जोड़ता है, और अधिकांश असंगत ब्राउज़रों के लिए सभी कुकीज़ SameSite=Noneसे हटा भी देता है। इस पुनर्लेखन का उद्देश्य "विरासत" व्यवहार प्री-क्रोम 80 को संरक्षित करना है।

मेरे कोडर फ्रंटलाइन ब्लॉग में पूरा लेखन :

<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। नेट कोर अनुप्रयोगों के लिए काम करना चाहिए, हालाँकि नए फ्रेमवर्क में उचित कोड और कॉन्फिगर विकल्प हैं जिससे आप इस व्यवहार को नियंत्रित कर सकते हैं। मैं ऊपर मेरे पुनर्लेखन का उपयोग करने से पहले आपके लिए उपलब्ध सभी विकल्पों पर शोध करने की सलाह दूंगा।


आपने इसे MVC 5 में कहां रखा है? में <system.net></system.net>?
जोएल विक्लंड

में<system.webServer>
zemien

नोट: यदि ASP.NET_SessionId- कुकी में पहले से ही SameSite=Laxयह है तो यह केवल संलग्न करेगा SameSite=Noneऔर इसे प्रतिस्थापित नहीं करेगा।
cederlof

@zemien मुझे नहीं मिलता है कि (SameSite=.*)?पैटर्न में आखिर क्यों है ?
cederlof

1
@cederlof तुम सही हो! मैंने अपने रेगेक्स का ठीक से परीक्षण नहीं किया, क्योंकि मेरा वातावरण पुराना था। नेट ढाँचा जो कि लैक्स गुण को स्वचालित रूप से नहीं जोड़ता था। अपने मामले में, आप SameSite=Laxशीर्ष लेख को बाहर करने के लिए एक अलग regex का उपयोग कर सकते हैं : ((.*)(ASP.NET_SessionId)(=.*))(?=SameSite)अद्यतन किए गए regex101.com/r/7D9UdO/3 देखें - हालांकि ध्यान दें कि यह regex आपके द्वारा बाद में इच्छित किसी भी चीज़ को बाहर कर देगा, जैसे कि सुरक्षित शीर्ष लेख। यह एक दुर्लभ स्थिति होनी चाहिए, इसलिए मुख्य बिंदु यह देखना है कि आपका OS + ढांचा + एप क्या उत्सर्जित कर रहा है और सूट करने के लिए regex लिख रहा है। मैं अपने उत्तर को दोनों तरीकों से प्रतिबिंबित करने के लिए अपडेट करूंगा :)
zemien

7

अंतिम अद्यतन: ज़ेमिएन का उत्तर मेरे से अधिक व्यापक और पूर्ण है। क्योंकि यह उपयोगकर्ता एजेंट के आधार पर कुकी सेट करता है।

मेरा जवाब:

आप SameSite = Lax को SameSite से बदल सकते हैं = कोई भी ASP.NET_SessionId के लिए web.config में निम्न तरीके से नहीं कर सकता है:

<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 पुनर्लेखन मॉड्यूल सर्वर पर स्थापित किया गया हो
विन्सेन्ट ड्यूक्रॉकेट

1
IOS समस्या के लिए आपके अपडेट से नए OSes में भी समस्या होगी। मूल रूप से, कुछ ब्राउज़र / OS, समसाइट = लैक को असाइन करेगा यदि वह सेमसाइट हेडर को याद नहीं कर रहा है। मेरा मानना ​​है कि एकमात्र तरीका UserAgent को सूँघना है और यह तय करना है कि हेडर को शामिल करना है या नहीं। मैं अभी भी शोध कर रहा हूं कि क्या इसे web.config के माध्यम से किया जा सकता है या इसे Session_Start में एक कोड परिवर्तन शामिल करना होगा।
zemien

बस जो @zemien लिखते हैं, उसे उजागर करने के लिए, आपका iOS-अपडेट एक समस्या को ठीक करता है लेकिन दूसरे का परिचय देता है।
cederlof

3

@zemien आपके समाधान ने हमारे Google क्रोम मुद्दों को सही ढंग से हल किया

हमारे पास एक एकीकरण है जहां हमारा आवेदन एक तृतीय पक्ष पर एक iframe में एम्बेडेड है। क्रोम संस्करण 80 जारी फ़रवरी 4 2020 ने कुकीज़ को लोड होने से रोका।

हालाँकि मुझे सभी कुकीज़ को कैप्चर करने के लिए पैटर्न को संशोधित करना था, सुरक्षित ध्वज जोड़ना था, और हमारे स्थानीय गैर https वातावरण के लिए लोकलहोस्ट पर पुनर्लेखन को लागू नहीं करने के लिए शर्त

<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 फ्रेमवर्क 4.8 + इंस्टॉलेशन पैच पर अपग्रेड करें: .NET फ्रेमवर्क के लिए 2019-12 संचयी अद्यतन x64 के लिए विंडोज 10 संस्करण 1909 के लिए 3.5 और 4.8 (KB4533002)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.