وبلاگ توسعه نرم افزار رادکام

اخبار، مطالب و رویدادهای مرتبط با توسعه نرم افزار رادکام

مشکل پرداخت از طریق درگاههای اینترنتی پس از بروزرسانی .NET Framework به نسخه 4.8

از نسخه .NET Framework 4.7.2 به بعد امکان تنظیم ویژگی sameSite روی کوکی (Cookie) فراهم شده است. تا قبل از این بروزرسانی، مقدار هدر کوکی sameSite تنظیم نمی شده است که در حقیقت معادل SameSiteMode.None می باشد ولی از ورژن ذکر شده به بعد مقدار پیش فرض هدر کوکی sameSite وقتی مقداری برای آن تنظیم نشود، به صورت پیش فرض مقدار SameSiteMode.Lax درنظر گرفته می شود.

این تغییر مقدار پیش فرض باعث شده است تا ارسال اطلاعات از سایتهای دیگر (مثلا درگاههای پرداخت اینترنتی بانکها) به سایت مبدا با مشکل مواجه شود.

تغییر مقدار پیش فرض ویژگی SameSite برای کوکی باعث می شود تا سایتهای دیگر  وقتی به سایت اصلی از طریق متد POST اطلاعات ارسال می کنند، در Request ارسالی، کوکی مربوط به ASP.NET_SessionId در دسترس درخواست ارسال شده از سایت مزبور نباشد و در نتیجه Session جدیدی ایجاد می شود که این امر باعث می شود موقعی که کاربر از سمت درگاه بانکی به سایت اصلی برمی گردد با صفحه لاگین مواجه شود.
 
با توجه به شیوه عمل درگاههای بانکی، برای حل این مشکل لازم است تا در تگ sessionState در web.config اصلی سایت، ویژگی cookieSameSite مقدار None بگیرد تا امکان POST کردن اطلاعات درگاه بانکی از طریق Session فعلی کاربر به سایت مبدا امکانپذیر باشد (همانند نسخه های قبلی .net):

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

بروزرسانی 1:

مرورگر کروم از نسخه 80 به بعد انتظار دارد کوکیهایی که برای آنها SameSite="None" برای آنها تنظیم شده، پرچم secure هم برای آنها تنظیم شده باشد. در غیر اینصورت کوکی مربوطه را بلاک می کند و در بخش کنسول پیغام زیر را نمایش می دهد:

A cookie associated with a resource at http://domain.tld/ was set with `SameSite=None` but without `Secure`. It has been blocked, as Chrome now only delivers cookies marked `SameSite=None` if they are also marked `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5633521622188032.

در نتیجه لازم است برای سایت خود SSL تهیه کنید و در web.config ویژگی requireSSL="true" را به تگ httpCookies اضافه کنید:

<httpCookies httpOnlyCookies="true" domain=".domain.tld" requireSSL="true" />

 

برای توضیحات بیشتر راجع به ویژگی SameSite در کوکی به صفحات زیر مراجعه کنید:


دوستدار رزم آرا
۱۳۹۸/۰۹/۲۵ United Kingdom
0
1

سلام مطلب شما کمک زیادی کرد. بسیار بسیار سپاسگزارم.

رضا
۱۳۹۸/۱۱/۰۲ Iran
0
1

تشکر, مشکلمون حل شد. البته مشکل ما بعد از اپدیت گرفتن ویندور سرور بوجود امده بود. چون یک پچ امنیتی در رابطه با همین قضیه گرفته بود و مقدار پیش فرض samesite به lax تغییر می کرد.

HR
۱۳۹۸/۱۱/۱۵ Iran
0
1

سلام. مطلب بسیار مفید و فوق العاده ای بود و مشکل من را حل کرد. با تشکر.

الهه
۱۳۹۸/۱۲/۱۹ Iran
0
1

بسیار عالی بود.ممنون

امید
۱۳۹۹/۰۱/۰۶
0
1

با سلام و خسته نباشید. متاسفانه ما هم تو سایتمون با این مشکل روبرو شدیم. در صورتی که کاربر با مرورگر کروم وارد صفحه درگاه پرداخت بشه و کارش بیش از یک دقیقه زمان ببره، موقع برگشت به سایت کوکی های یوزرنیم و پسورد حذف شده و کاربر لاگات میشه. این در حالیه که با بقیه مرورگرها مشکلی وجود نداره. ولی سایت ما PHP هست و از مدیریت محتوای دیتالایف استفاده میکنه. ممنون میشم اگر راه حل این مشکل رو در PHP هم توضیح بدین که چیکار کنیم. سپاس.

مجید اطلس باف
۱۳۹۹/۰۱/۱۱ Iran
0
0

سلام، در PHP هم فکر می کنم که باید دقیقا همین روند انجام بشه، یعنی ویژگی cookie_sameSite برای کوکی که مقدار Session ID را نگهداری می کند، مقدار None داشته باشد و ویژگی cookie_Secure مقدار On داشته باشد. (لازم است سایت شما روی https باشد، این مورد برای عملکرد صحیح در مرورگر کروم از ورژن 80 به بعد می باشد.)

برای توضیحات بیشتر به آدرس زیر مراجعه کنید:



نام را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید