آسیبپذیری 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 برای عملیات حساس از جمله مهمترین روشهای پیشگیری از این حمله هستند. توسعهدهندگان وب باید همواره فرمها و درخواستها را با سیاستهای دقیق امنیتی محافظت کنند تا جلوی این تهدید جدی را بگیرند.