التعامل مع هجمات CSRF في PHP

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 02 سبتمبر 2024

محتوى المقال

التعامل مع هجمات CSRF في PHP

هجمات Cross-Site Request Forgery (CSRF) تُعتبر من أكثر الهجمات شيوعًا في تطبيقات الويب، حيث يستغل المهاجم الثقة التي يتمتع بها المستخدم في موقع معين لتنفيذ طلبات غير مرخصة نيابة عن المستخدم. في هذا المقال، سنتناول كيفية التعامل مع هجمات CSRF في PHP وحماية تطبيقاتك من هذا النوع من الهجمات.

ما هي هجمات CSRF؟

CSRF هي اختصار لـ Cross-Site Request Forgery، وهو نوع من الهجمات الذي يقوم فيه المهاجم بإجبار المستخدم على تنفيذ إجراءات معينة على موقع ويب دون علمه أو موافقته. يتم هذا عن طريق إرسال طلبات HTTP من موقع آخر يبدو أنها تأتي من المستخدم الشرعي.

كيفية عمل هجمات CSRF

عادةً ما يعمل هجوم CSRF على النحو التالي:

  • المستخدم يسجل الدخول: يسجل المستخدم الدخول إلى موقع ويب بشكل طبيعي باستخدام اسم المستخدم وكلمة المرور.
  • زيارة موقع ضار: يزور المستخدم موقعًا ضارًا يحتوي على كود يقوم بإرسال طلبات HTTP إلى الموقع الأصلي.
  • تنفيذ الأوامر: يتم إرسال الطلبات الخبيثة إلى الموقع الأصلي وكأنها طلبات مشروعة من المستخدم.

مخاطر هجمات CSRF

إذا نجح المهاجم في تنفيذ هجوم CSRF، فقد يتمكن من القيام بعمليات حساسة مثل تحويل الأموال أو تغيير إعدادات الحساب دون علم المستخدم. لذا فإن حماية تطبيقات الويب من هذه الهجمات ضروري لضمان سلامة وأمان المستخدمين.

حماية تطبيقات PHP من هجمات CSRF

هناك عدة طرق يمكن استخدامها لحماية تطبيقات PHP من هجمات CSRF. من بين هذه الطرق:

1. استخدام الرموز المميزة (CSRF Tokens)

واحدة من أكثر الطرق فعالية لمنع هجمات CSRF هي استخدام الرموز المميزة (Tokens). تُولد هذه الرموز بشكل عشوائي وتُضمّن في النماذج HTML عند إرسالها. عند معالجة الطلب، يتم التحقق من صحة الرمز المرسل مع الطلب للتأكد من أنه يتطابق مع الرمز المخزن على الخادم.

<?php
# إنشاء رمز CSRF
session_start();
if (empty($_SESSION['csrf_token'])) {
   $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

# تضمين الرمز في النموذج
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
?>

2. التحقق من الطلبات POST فقط

هجمات CSRF تعتمد بشكل كبير على إرسال طلبات GET، لذا من الجيد التحقق من أن الطلبات التي تنفذ عمليات حساسة (مثل حذف حساب) تستخدم POST فقط. يمكن القيام بذلك باستخدام الكود التالي:

<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
   die("Invalid request method");
}
?>

3. استخدام أصول جديدة للجلسة

من المهم إعادة توليد معرّفات الجلسات بانتظام وخاصة بعد عمليات تسجيل الدخول لمنع اختراق الجلسة واستخدامها في هجمات CSRF.

التحقق من صحة الرمز المميز

بعد تضمين الرمز المميز في النماذج، يجب التحقق من صحته عند استلام الطلب. إليك كيفية القيام بذلك:

<?php
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
   die("Invalid CSRF token");
}
?>

الخلاصة

هجمات CSRF تشكل تهديدًا كبيرًا لأمان تطبيقات الويب، ولكن من خلال اتباع الممارسات الجيدة مثل استخدام الرموز المميزة والتحقق من الطلبات، يمكن تقليل هذا التهديد بشكل كبير. تأكد دائمًا من أن تطبيقك محمي وأنك تأخذ جميع الاحتياطات اللازمة للحفاظ على أمان بيانات المستخدمين.

طور مهاراتك: مقالات يجب قراءتها في البرمجة