محمد شرف

أمن PHP: الأساسيات التي ما زالت مهمة

XSS وحقن SQL وCSRF ورفع الملفات والتضمين وكلمات المرور: القائمة القصيرة التي يحتاجها كل مطوّر PHP.

· 1 دقائق قراءة

من الأرشيف: شاركتُ عام 2012 دليلًا طويلًا عن أمن PHP لكاتب آخر على مدونتي القديمة. هذه نسخة قصيرة ومحدّثة بكلماتي.

دليل طويل عن أمن PHP من 2012 أمضى صفحات في الحديث عن register_globals و«magic quotes»، وكلاهما حُذف من PHP منذ سنوات. ما لم يتغير هو قائمة الأخطاء التي تفتح الباب للمهاجمين:

  • البرمجة عبر المواقع (XSS): لا تطبع مدخلات المستخدم كما هي أبدًا. اهرب منها بحسب مكانها: htmlspecialchars($value, ENT_QUOTES, 'UTF-8') لـ HTML، واستخدم نظام قوالب يقوم بذلك افتراضيًا.
  • حقن SQL: لا تبنِ استعلامات SQL بدمج النصوص. استخدم الاستعلامات المُعدّة مسبقًا (PDO أو mysqli) لكل استعلام فيه قيمة.
  • الثقة في النموذج: الحقول المخفية والأسعار والمعرّفات في أي نموذج يمكن للمستخدم تغييرها. تحقق من كل شيء مجددًا على السيرفر.
  • CSRF: كل نموذج يغيّر شيئًا يحتاج رمزًا سريًا لكل جلسة، ويجب أن تكون كوكيز الجلسة SameSite.
  • رفع الملفات: باب يحبه المهاجمون، وكتبت عنه بشكل منفصل: رفع الملفات: الباب الذي نتركه مفتوحًا.
  • التضمين وeval(): لا تسمح أبدًا لمدخلات المستخدم أن تحدد أي ملف يُضمَّن أو أي كود يُنفَّذ.
  • عرض الأخطاء: عطّل display_errors في بيئة الإنتاج وسجّل الأخطاء بدلًا من عرضها.
  • كلمات المرور: انسَ MD5 والملح المصنوع يدويًا. استخدم password_hash() وpassword_verify()، وPHP يتولى الملح والخوارزمية القوية عنك.

للتعمق أكثر، تغطي سلسلة أوراق OWASP المرجعية كل هذه النقاط بشكل جيد.

شاركWhatsAppLinkedInXTelegramFacebook