تنظیم ویژگی SameSite کوکیها برای پرداخت آنلاین
مرورگرهای مدرن در تلاش هستند تا بالاترین سطح امنیت را برای کاربران خود فراهم کنند. یکی از ویژگیهای جدیدی که به این منظور به مرورگرهای وب اضافه شده است، ویژگی SameSite برای کوکیها است.
این ویژگی مشخص میکند که کوکیهای تنظیم شده در سایت چه زمانی در دسترس باشند. مقادیر قابل قبول برای SameSite عبارتند از:
- Lax
مقدار پیش فرض. این مقدار تعیین میکند که کوکیها فقط برای درخواستهای معمولی در دسترس باشند و فایلهای جانبی و درخواستهای POST فاقد کوکی خواهند بود.
- Strict
کوکیها فقط زمانی که کاربر به صورت معمولی سایت را باز کند در دسترس خواهند بود و هدایت کاربر به سایت از هر طریقی، بدون کوکی انجام میشود.
- None
تعیین مقدار None باعث میشود تا کوکیها همیشه در دسترس باشند( وضعیت قدیمی )
استفاده از SameSite چه زمانی اهمیت پیدا میکند ؟
- اگر سایت شما به خوبی حملات CSRF را شناسایی و مسدود میکند، میتوانید برای کارایی بهتر، SameSite را برابر None قرار بدهید.
- اگر سایت شما دارای فرآیندهایی مثل پرداخت الکترونیک است که لازم است کاربر به سایت بانک هدایت شود و سپس با اطلاعات تکمیلی به سایت شما بازگردد، لازم است تا مقدار None را برای SameSite تعیین کنید تا در بازگشت کوکیهای کاربر از بین نروند و بتوانید آنها را شناسایی کنید.
- اگر سایت شما از کوکیها برای عملکرد خاصی استفاده نمیکند و شناسایی کاربران کم اهمیت است، میتوانید مقدار آن را روی Strict تنظیم کنید.
محدودیت تنظیم SameSite
اگر میخواهید مقدار SameSite را برابر None قرار بدهید، لازم است تا سایت شما با استفاده از پروتکل https در دسترس باشد. در غیر این صورت، حداقل مرورگر کروم، به تنظیمات شما اهمیتی نخواهد داد و امکان پرداخت آنلاین را نخواهید داشت.
تنظیم SameSite با PHP
نسخههای قدیمیتر php پیش از ۷.۳ روشی مستقیم برای تنظیم SameSite ندارند. در عوض با استفاده از یک مشکل فنی در فراخوانی دستور setcookie این کار قابل انجام است.
اگر از نگارش جدیدتر php استفاده میکنید، دستور setcookie این قابلیت را به پارامترها اضافه کرده است.
برای پشتیبانی از نگارشهای مختلف php میتوانید از تابع زیر برای تنظیم cookie استفاده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function setCookieSameSite( $name, $value, $expire, $path, $domain, $secure, $httponly, $samesite = 'None' ) { if( PHP_VERSION_ID < 70300 ) { setcookie( $name, $value, $expire, $path . '; samesite=' . $samesite, $domain, $secure, $httponly ); return; } setcookie( $name, $value, [ 'expires' => $expire, 'path' => $path, 'domain' => $domain, 'samesite' => $samesite, 'secure' => $secure, 'httponly' => $httponly, ] ); } |
تنظیم SameSite با Microsoft.NET
برای استفاده از این ویژگی میبایست از نسخهی دات نت ۴.۷.۲ به بعد استفاده کنید و تنظیمات کوکی را در فایل web.config به صورت زیر تنظیم کنید:
1 |
<sessionState ... cookieSameSite="None" /> |
فریمورکهای php و درخواستهای بانکی
فریمورکهای جدید مثل سیمفونی و لاراول، پیشبینیهای لازم را برای تنظیم این ویژگی به صورت خودکار انجام میدهند و اگر از نگارشهای جدید این فریمورکها برای برنامهنویسی وب استفاده کنید، تغییری را احساس نخواهید کرد. این فریمورکها همچنین ابزارهایی برای جلوگیری از حملات CSRF در اختیار شما قرار میدهند تا امنیت اطلاعات شما و کاربران شما نیز تحت کنترل باشد.
با تنظیم نکردن SameSite چه اتفاقی رخ میدهد ؟
مقدار پیشفرض SameSite برابر با Lax است. به این معنی که کاربران عادی سایت در مراجعات مکرر به سایت دارای کوکی هستند. ولی اگر از سایت دیگری با روش POST به سایت شما هدایت شوند، کوکیها همراه درخواست آنها وجود ندارد و مثل این است که اولین بار است سایت را باز میکنند. این رفتار میتواند برای بعضی از سایتها مشکلساز باشد.
همچنین اگر سایت شما برای جلوگیری از حملات CSRF آمادگی نداشته باشد، در مرورگرهای قدیمی ممکن است کاربران شما بدون اینکه بخواهند با ارسال درخواستهایی غیرواقعی از سمت هکرها، با مشکلاتی مواجه شوند ولی در مرورگرهای جدید، درخواستهای اینچنین قابلیت اجرا ندارند.