CodeShot

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 را هم به‌عنوان لایه دوم دفاعی نگه دارید.