কীভাবে আমার Asp.net_SessionID কুকিতে স্বয়ংক্রিয়ভাবে সেমসাইট বৈশিষ্ট্য যুক্ত হল?


20

সম্প্রতি আমার সেশন কুকিতে স্বয়ংক্রিয়ভাবে একই স্থান = শিথিল যোগ করুন! এই বৈশিষ্ট্যটি সেশনে আইডি যোগ করুন: "Set-Cookie ASP.NET_SessionId=zana3mklplqwewhwvika2125; path=/; HttpOnly; **SameSite=Lax**"

আমার ওয়েবসাইট আইআইএস 8.5, উইন্ডোজ 2012 আর 2 এ হোস্ট করেছে এবং ডাব্লুএএফ বা ইউরালাইরাইট নেই এবং আমি অ্যান্টিভাইরাস (ক্যাস্পার) বন্ধ করি।

তবে এখনও কিছু গ্রাহক সার্ভারে একই সমস্যা রয়েছে।

কোন ধারণা?

সম্পাদিত: আমি এটি খুঁজে পেয়েছি: https://support.microsoft.com/en-us/help/4524419/kb4524419

এএসপি.এনইটি এখন HTTPCookie.SameSite মান 'কিছুই নয়' ক্রমে সামিসাইট কুকি হ্যান্ডলিংয়ে আসন্ন পরিবর্তনগুলি সামঞ্জস্য করার জন্য একটি সেমসাইট কুকির শিরোনাম নির্গত করবে। এই পরিবর্তনের অংশ হিসাবে, ফর্মসঅথ এবং সেশনস্টেট কুকিজগুলি পূর্বের ডিফল্ট 'কিছুই নয়' এর পরিবর্তে সেমসাইট = 'লক্ষ' দিয়ে জারি করা হবে, যদিও এই মানগুলি ওয়েবকনফাইগে ওভাররাইড করা যায়।

আমি কীভাবে ওয়েবকনফাইগে সেশনস্টেটের জন্য একই সাইটের কুকিজকে ওভাররাইড করতে পারি? আমি এই লাইনটি যুক্ত করি, তবে এটি সেশনআইডি কুকিতে কাজ করে না! <httpCookies sameSite="Unspecified" />

সম্পাদনা: আমি এটি খুঁজে পেয়েছি: https://docs.microsoft.com/en-us/dotnet/api/system.web.configration.sessionstatesection.cookiesamesite?view=netframework-4.8# সিস্টেমম_উইব_সিঙ্কিগ্রেশন_সেশনস্টেটসেকশন_কুকিসেমসাইট

সেশনস্টেট ট্যাগের "কুকিসেমসাইট" বৈশিষ্ট্য দ্বারা স্টেটসরভারের জন্য একই সাইট সেট করুন।


আপনি এটি যোগ করে সমাধান করতে হবে আছে "<sessionstate CookieSameSite" আমি 4.8 ইনস্টল করা আছে কিন্তু যখন আমি আইআইএস ম্যানেজার থেকে sessionstate অধ্যায় অ্যাক্সেস আমি শুধু অচেনা অ্যাট্রিবিউট
Jokies টিং

1
আমি আইআইএস-তে একই বার্তা পাই তবে এটি কাজ করে এবং সেট-কুকি সময়ে একই স্থান মান পরিবর্তন করে। প্রিভিউজ বিহেভিয়ার পেতে আমি আমার ওয়েবকনফাইগে কুকিসেমসাইট = "কিছুই নয়" যুক্ত করি। লক্ষ্য করুন যে কুকিসেমসাইটটি কেসসেটিভ।
সাদেঘ

আমাকে এর জন্য কেবল একটি 4.5.2 লিগ্যাসি সাইট প্যাচ করতে হয়েছিল - সেমসাইটটি কনফিগারদের দ্বারা সমর্থিত ছিল না তাই আমাকে সেশন_শার্টে কুকিটি আটকাতে হয়েছিল এবং এটি সরাসরি "সেমসাইট = কিছুই নয়; সুরক্ষিত" যোগ করে পুনরায় লিখতে হয়েছিল।
প্যারানয়েডকডার

@ পারনয়েডকোডার আপনার পরামর্শের জন্য আপনাকে ট্যাঙ্ক করুন, আমি। নেট 4.6.1 ব্যবহার করি এবং এটি আমার পক্ষে কাজ করে। তবে আপনার সমাধান সম্পর্কে আমার একটি প্রশ্ন রয়েছে: আপনি ইউআরএল পুনর্লিখন (আইআইএস-এর সম্প্রসারণ) ব্যবহার করেন বা সেশন_শার্টে কোড দ্বারা আপনি এটি পুনরায় লিখতে পারেন, আপনি কি আমাকে আপনার কোডটি দেখাতে পারেন?
সাদেঘ

উত্তর:


19

একই সাইট = কোনটিই নয়, লক্ষ বা স্ট্রাইক জন্য ওয়েব কোডফাইজে এই বিকল্পগুলি যুক্ত করুন

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

1
<httpCookies sameSiteনেট ফ্রেমওয়ার্ক 4.8
আয়রনসিয়ান

এটি কি 4.6.1 কাঠামোর জন্য কাজ করে?
অঙ্কুশ জৈন

@ অঙ্কুশ জাইন, না, এটি সমর্থন করে। নেট ফ্রেমওয়ার্ক ৪.7.২।
ভাসিলি জাভেরেভ

11

আমি পুনর্লিখনটি ব্যবহার করতে পারি না, কারণ আমার সমস্ত গ্রাহক সার্ভারে UrlRewrit ইনস্টল করা হয়নি।

অবশেষে আমি আমার ওয়েবকনফাইগে কুকিসেমসাইট যুক্ত করব:

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


2
এটি শুধুমাত্র নেট নেট 4.7.2 পরে কাজ করবে
ম্রালেঘি

1
আমি এটি নেট 4.6.1 এ ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে।
সাদেঘ

আমি দুঃখিত @ সাদেঘ.কে, তবে এটি এখানে বলা হিসাবে 4.. before.২ এর আগে কাজ করবে না: ডকস.মাইক্রোসফট
এএনএস

: @cederlof আমি এই পাওয়া support.microsoft.com/en-us/help/4533011/kb4533011
Sadegh

@ সাদেঘ রাইট, তবে এটি ওয়েবকনফিগের cookieSameSiteকার্যকারিতা যুক্ত করে না -। নেট 4.7.2 করে। আমি আমার মন্তব্যে পোস্ট করা লিঙ্কটি আপনি উল্লেখ করা পৃষ্ঠা থেকেও লিঙ্কযুক্ত।
সিডারলফ

8

অনেক পুরানো ফ্রেমওয়ার্কের জন্য কুকিসেমসাইট বৈশিষ্ট্যটি উপলভ্য নয়। আপনি যদি এমন পরিস্থিতিতে থাকেন যেখানে আপনার পরিবেশে গৃহীত উত্তর সমর্থনযোগ্য নয়, তবে পড়ুন!

আমি এই 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>

এটি বেশিরভাগ এএসপি। নেট এবং এএসপি। নেট কোর অ্যাপ্লিকেশনগুলির জন্য কাজ করা উচিত, যদিও নতুন ফ্রেমওয়ার্কগুলিতে আপনাকে এই আচরণটি নিয়ন্ত্রণ করতে দেয় সঠিক কোড এবং কনফিগারেশন বিকল্প রয়েছে। আমি উপরের আমার পুনর্লিখনটি ব্যবহার করার আগে আপনাকে উপলভ্য সমস্ত বিকল্পগুলি নিয়ে গবেষণা করার পরামর্শ দেব।


আপনি এমভিসি 5 এ কোথায় রাখবেন? ইন <system.net></system.net>?
জোয়েল উইক্লুন্ড

ইন<system.webServer>
জেমিয়ান

দ্রষ্টব্য: যদি ASP.NET_Sશન আইড-কুকিতে ইতিমধ্যে এটি থাকে তবে এটি SameSite=Laxকেবল যুক্ত হবে SameSite=Noneএবং এটি প্রতিস্থাপন করবে না।
সিডারলফ

@zemien আমি (SameSite=.*)?প্যাটার্নে কেন এগুলি পাই না ?
সিডারলফ

1
আপনি ঠিক আছেন! আমার পরিবেশটি পুরানো হওয়ায় আমি আমার রেইজেক্সটি সঠিকভাবে পরীক্ষা করিনি। নেট ফ্রেমওয়ার্ক যা লক্ষের সম্পত্তি স্বয়ংক্রিয়ভাবে যুক্ত হয় না। আপনার ক্ষেত্রে, আপনি শিরোনামকে বাদ দেওয়ার জন্য একটি আলাদা রেজেক্স ব্যবহার করতে পারেন SameSite=Lax: ((.*)(ASP.NET_SessionId)(=.*))(?=SameSite)আপডেট করা regex101.com/r/7D9UdO/3 দেখুন - তবে মনে রাখবেন যে এই রেজেক্স পরে আপনাকে চাইবে এমন কিছু বাদ দেবে যেমন সুরক্ষিত শিরোনাম। এটি একটি বিরল শর্ত হওয়া উচিত তাই মূল বিষয়টি হ'ল আপনার ওএস + ফ্রেমওয়ার্ক + অ্যাপটি কী নির্গত হচ্ছে এবং তা অনুসারে রেজেক্সটি লিখতে হবে। আমি উভয় উপায়ে প্রতিফলিত করতে আমার উত্তর আপডেট করব :)
জিমিয়ান

7

শেষ আপডেট: জেমিয়নের উত্তর আমার চেয়ে বেশি বিস্তৃত এবং সম্পূর্ণ। কারণ এটি ব্যবহারকারী এজেন্টের উপর ভিত্তি করে কুকি সেট করে।

আমার উত্তর:

আপনি সেমসাইট = লক্ষকে সেমসাইটের সাথে প্রতিস্থাপন করতে পারেন = এএসপি-র জন্য কিছুই নয়।

<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>

আপডেট: আইওএস সমস্যা রোধ করতে , প্রতিস্থাপন করুন

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

সঙ্গে

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

2
এটি তখনই সম্ভব যখন আইআইএস পুনর্লিখনের মডিউলটি সার্ভারে ইনস্টল করা হয়
ভিনসেন্ট ডুক্রোয়েট

1
আইওএস সমস্যার জন্য আপনার আপডেটটি আরও নতুন ওএসে সমস্যা সৃষ্টি করবে। মূলত বলতে গেলে, কিছু ব্রাউজার / ওএস সেমসাইট হ্যাডার অনুপস্থিত থাকলে সেমসাইট = লাক বরাদ্দ করবে। আমি বিশ্বাস করি একমাত্র উপায় হ'ল ইউজার এজেন্ট স্নিফিং করা এবং শিরোনাম অন্তর্ভুক্ত করা হবে কিনা তা সিদ্ধান্ত নেওয়া। এটি এখনও ওয়েবকনফাইগের মাধ্যমে করা যায় কিনা তা নিয়ে গবেষণা করছি বা এটি সেশন_শার্টে একটি কোড পরিবর্তন অন্তর্ভুক্ত করতে হবে।
জেমিয়ান

@Zemien কী লিখেছে তা হাইলাইট করার জন্য, আপনার আইওএস-আপডেট একটি সমস্যা সংশোধন করে তবে অন্যটির পরিচয় দেয়।
সিডারলফ 13

3

@zemien আপনার সমাধানটি সঠিকভাবে আমাদের গুগল ক্রোম সমস্যা সমাধান করেছে

আমাদের একটি ইন্টিগ্রেশন রয়েছে যেখানে আমাদের অ্যাপ্লিকেশনটি তৃতীয় পক্ষের একটি আইফ্রেমে এম্বেড করা আছে। ক্রোম সংস্করণ 80 ফেব্রুয়ারী 42020 এ প্রকাশিত কুকিজগুলি লোড হতে বাধা দেয়।

তবে আমাকে সমস্ত কুকিজ ক্যাপচার, সুরক্ষিত পতাকা যোগ করতে এবং আমাদের স্থানীয় অ https পরিবেশের জন্য লোকালহোস্টে পুনর্লিখনটি প্রয়োগ না করার শর্তটি পরিবর্তন করতে হয়েছিল condition

<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

আমার জন্য কাজ কর. আমার ওয়েবকনফিগ ফাইলে যুক্ত হয়েছে:

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

নেট ফ্রেমওয়ার্ক 4.8 + ইনস্টলেশন প্যাচে আপগ্রেড করুন: 2019-12 এক্স 64 এর জন্য উইন্ডোজ 10 সংস্করণ 1909 এর জন্য নেট নেট ফ্রেমওয়ার্ক 3.5 এবং 4.8 এর সংশ্লেষিত আপডেট (KB4533002)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.