لا يحتاج اختراق أغلب المواقع إلى مهارات خارقة؛ يكفي أن يجد المهاجم خطأً من الأخطاء المعروفة منذ سنوات. والخبر الجيد أن سدّ هذه الأخطاء ليس صعباً إذا التزمت بعادات واضحة منذ أول سطر.

1. استعلامات مهيّأة لمنع حقن SQL

لا تدمج مدخلات المستخدم في نص الاستعلام أبداً. استخدم الاستعلامات المهيّأة (Prepared Statements):

$stmt = $db->prepare('SELECT id, name FROM users WHERE email = ?');
$stmt->bind_param('s', $email);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();

2. كلمات المرور تُخزَّن مُجزَّأة لا نصاً

استخدم password_hash() عند الحفظ وpassword_verify() عند الدخول. لا تبتكر خوارزمية، ولا تستخدم MD5 أو SHA1 لكلمات المرور.

3. تهريب كل ما تعرضه (XSS)

أي نص قادم من مستخدم أو قاعدة بيانات يُمرَّر عبر htmlspecialchars() قبل طباعته في الصفحة، وإلا قد ينفّذ المهاجم سكربتاً في متصفح زوّارك.

4. رمز CSRF في كل نموذج

أي طلب يغيّر بيانات (حفظ، حذف، دفع) يجب أن يحمل رمزاً عشوائياً مرتبطاً بالجلسة ويُتحقق منه في الخادم، حتى لا يُخدع المستخدم المسجَّل للقيام بإجراء لا يريده.

5. رفع الملفات بحذر

تحقق من نوع الملف الفعلي لا من امتداده فقط، وحدّد الحجم، وأعد تسمية الملف باسم عشوائي، ومنع تنفيذ PHP داخل مجلد الرفع. وملفات العملاء الخاصة تُخدَّم عبر سكربت يتحقق من الصلاحية.

6. جلسات آمنة وHTTPS

فعّل الخصائص HttpOnly وSecure وSameSite لكوكي الجلسة، وجدّد معرّف الجلسة بعد الدخول، واجعل الموقع كله على HTTPS.

7. تحديثات وإعدادات إنتاج

  • استخدم إصداراً من PHP ما زال مدعوماً بالتحديثات الأمنية.
  • أوقف عرض الأخطاء للزوار (display_errors = Off) واحفظها في سجل.
  • احذف ملفات التثبيت والاختبار بعد الانتهاء.
  • خذ نسخاً احتياطية دورية واختبر استعادتها فعلاً.
الأمان عادة تبدأ مع أول سطر، وليس ميزة تُضاف قبل الإطلاق بيوم.

هذه القائمة لا تغني عن مراجعة أمنية كاملة، لكنها تسدّ الأبواب التي يطرقها المهاجمون أولاً. وإن أردت فحصاً لموقعك الحالي فتواصل معي.