آسیب‌پذیری‌ها و اکسپلویت‌ها

آسیب‌پذیری CSRF چیست؟

آسیب‌پذیری CSRF چیست و چه تاثیری بر امنیت وب دارد؟

در دنیای امنیت وب، آسیب‌پذیری CSRF یا Cross-Site Request Forgery یکی از حملات خطرناک و در عین حال نادیده گرفته‌شده است. این نوع حمله، مهاجم را قادر می‌سازد تا بدون آگاهی کاربر، درخواست‌هایی را از طرف او به وب‌سایت معتبر ارسال کند. در این مقاله به صورت جامع به بررسی چیستی این آسیب‌پذیری، نحوه عملکرد آن، نمونه‌هایی از سوءاستفاده‌ها و راهکارهای جلوگیری از آن می‌پردازیم.

CSRF چیست؟

CSRF نوعی حمله است که در آن یک کاربر معتبر (مثلاً لاگین‌کرده در یک سایت) به صورت ناخواسته و ناآگاهانه درخواست‌هایی را به سمت سایت ارسال می‌کند. این درخواست‌ها توسط مهاجم طراحی می‌شوند و اگر سایت هدف کنترل مناسبی نداشته باشد، به عنوان یک درخواست معتبر تلقی می‌شوند.

مثال ساده از حمله CSRF

فرض کنید کاربری در سایت بانک آنلاین وارد حساب خود شده و کوکی جلسه فعال دارد. اگر در همان زمان کاربر به سایتی آلوده مراجعه کند و آن سایت حاوی فرم مخربی باشد که به صورت خودکار یک انتقال وجه انجام می‌دهد، درخواست از طرف کاربر به سایت بانک ارسال می‌شود و ممکن است موفق باشد.

<form action="https://bank.com/transfer" method="POST">
  <input type="hidden" name="to_account" value="987654321" />
  <input type="hidden" name="amount" value="1000000" />
  <input type="submit" value="Transfer" />
</form>
<script>document.forms[0].submit();</script>

اگر سایت بانک از هیچ مکانیزم ضد-CSRF استفاده نکند، این حمله ممکن است موفقیت‌آمیز باشد.

چرا CSRF خطرناک است؟

  • اجرای اقدامات مخرب به‌نام کاربر
  • تغییر تنظیمات حساب کاربری
  • حذف اطلاعات یا ارسال فرم‌ها
  • انتقال وجه در سیستم‌های مالی
  • افزودن مدیر جدید در پنل‌های مدیریت سایت

تفاوت CSRF با XSS

در XSS مهاجم کدی را در سایت تزریق می‌کند تا در مرورگر کاربر اجرا شود. اما در CSRF، مهاجم بدون تزریق کد به سایت هدف، فقط از اعتماد سرور به کاربر سوءاستفاده می‌کند. در XSS هدف مرورگر کاربر است، در CSRF هدف سرور است.

چه شرایطی باعث موفقیت حمله CSRF می‌شود؟

  • فعال بودن کوکی‌های جلسه در مرورگر کاربر
  • نبود توکن CSRF در فرم‌ها
  • نبود بررسی Referer یا Origin
  • استفاده از روش GET برای عملیات حساس

راهکارهای جلوگیری از CSRF

1. استفاده از توکن CSRF

ایمن‌ترین راه مقابله با CSRF، استفاده از توکن‌های تصادفی در هر فرم است. این توکن باید در هر صفحه تولید شود و در فرم ارسال شود. سپس در سمت سرور بررسی شود که آیا توکن معتبر است یا خیر.

<input type="hidden" name="csrf_token" value="abc123xyz">

2. بررسی هدر Referer یا Origin

با بررسی هدر Referer یا Origin می‌توان اطمینان حاصل کرد که درخواست از دامنه معتبر آمده است. البته این روش ممکن است در برخی مرورگرها یا درخواست‌ها غیرقابل اعتماد باشد.

3. اجتناب از استفاده از GET برای عملیات حساس

هیچ‌گاه عملیات مهم مانند حذف، ویرایش، تغییر رمز یا انتقال وجه را با متد GET انجام ندهید، زیرا راحت‌تر قابل اجرا توسط مهاجم هستند.

4. تنظیم SameSite برای کوکی‌ها

با تنظیم ویژگی SameSite=Strict یا Lax برای کوکی‌ها، می‌توان ارسال کوکی‌ها از دامنه‌های خارجی را محدود کرد. این کار مانع موفقیت بسیاری از حملات CSRF می‌شود.

5. استفاده از فرم‌های POST با بررسی اعتبار

تمام فرم‌ها باید از متد POST استفاده کنند و در سمت سرور نیز صحت ورودی‌ها بررسی شود، به ویژه برای عملیات حساس.

CSRF در وردپرس

وردپرس به صورت پیش‌فرض از توکن‌های CSRF با نام Nonce استفاده می‌کند. هر زمان که افزونه یا قالبی توسعه می‌دهید، باید توکن‌های Nonce را در فرم‌ها و درخواست‌های AJAX استفاده کنید.

// افزودن Nonce به فرم
wp_nonce_field('my_action', 'my_nonce');
// بررسی Nonce در پردازش فرم
if (!isset($_POST['my_nonce']) || !wp_verify_nonce($_POST['my_nonce'], 'my_action')) {
    die('دسترسی غیرمجاز');
}

افزونه‌های وردپرس برای مقابله با CSRF

  • Wordfence Security: مقابله با حملات CSRF و سایر تهدیدات
  • iThemes Security: اعمال سیاست‌های امنیتی دقیق برای فرم‌ها و کوکی‌ها
  • All In One WP Security: استفاده از تنظیمات پیشرفته ضد-CSRF

آیا مرورگرها به مقابله با CSRF کمک می‌کنند؟

بله، مرورگرهای مدرن با معرفی ویژگی‌هایی مانند SameSite و Strict-Transport-Security تا حدودی از CSRF جلوگیری می‌کنند. با این حال، وظیفه اصلی مقابله با CSRF بر عهده توسعه‌دهنده سمت سرور است.

جمع‌بندی

آسیب‌پذیری CSRF از طریق فریب کاربر و ارسال درخواست‌های ناخواسته به وب‌سایت‌های معتبر عمل می‌کند. این حمله می‌تواند منجر به اقدامات مخرب جدی مانند تغییر رمز عبور، حذف داده‌ها یا انتقال وجه شود. استفاده از توکن‌های CSRF، بررسی هدرها، تنظیم کوکی‌ها و اجتناب از متد GET برای عملیات حساس از جمله مهم‌ترین روش‌های پیشگیری از این حمله هستند. توسعه‌دهندگان وب باید همواره فرم‌ها و درخواست‌ها را با سیاست‌های دقیق امنیتی محافظت کنند تا جلوی این تهدید جدی را بگیرند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *