CSRF Token (Synchronizer Token) در مقابل کوکی SameSite
CSRF Token یک مقدار تصادفی و غیرقابلحدس است که سرور در فرم یا هدر قرار میدهد و در هر درخواست تغییردهنده باید همراه با آن ارسال شود تا سرور مطمئن شود درخواست از صفحه واقعی سایت آمده، در حالی که ویژگی SameSite کوکی به مرورگر میگوید کوکی را فقط در درخواستهایی که از همان سایت شروع شدهاند ارسال کند و درخواستهای Cross-Site را از اول مسدود میکند.
| ویژگی | CSRF Token (Synchronizer Token) | کوکی SameSite |
|---|---|---|
| محل اعمال | کد برنامه (فرم/هدر) | تنظیمات کوکی |
| نیاز به تغییر کد سمت سرور | بله | کم (فقط تنظیم کوکی) |
| پشتیبانی مرورگرهای قدیمی | کامل | محدودتر |
کِی از CSRF Token (Synchronizer Token) استفاده کنیم؟
وقتی میخواهید یک لایه دفاعی صریح و مستقل از رفتار مرورگر داشته باشید که در فرمها یا هدرهای درخواست قابل بررسی است.
کِی از کوکی SameSite استفاده کنیم؟
وقتی میخواهید با کمترین تغییر در کد برنامه و فقط با تنظیم یک ویژگی کوکی (SameSite=Strict یا Lax) جلوی اکثر حملات CSRF را بگیرید.
مثال CSRF Token (Synchronizer Token)
<form method="POST" action="/transfer">
<input type="hidden" name="csrf_token"
value="a1b2c3..." />
</form>
مثال کوکی SameSite
Set-Cookie: sessionId=abc123;
SameSite=Strict; Secure; HttpOnly
اشتباه رایج
اشتباه رایج تکیه صرف بر SameSite=Lax بهعنوان تنها دفاع است؛ برخی درخواستهای GET همچنان با Lax اجازه ارسال کوکی دارند و برخی مرورگرهای قدیمیتر از SameSite پشتیبانی نمیکنند، پس برای عملیات حساس همچنان CSRF Token توصیه میشود.
جمعبندی
برای دفاع سریع و کمهزینه از SameSite Cookie استفاده کنید، اما برای عملیات حساس (تغییر رمز، انتقال وجه) بهتر است CSRF Token را هم بهعنوان لایه دوم دفاعی نگه دارید.
