تعرف على أخطر الثغرات الأمنية في تطبيقات الويب وكيفية حمايتها.
تركّز هذه الوحدة على أهمّ فئات الثغرات التي تصنّفها مبادرة OWASP كأخطر مشكلات تطبيقات الويب (OWASP Top 10). سنتعرف على كل فئة — الجذر التقني للمشكلة، أمثلة واقعية ومبسطة، كيفية اكتشافها باستخدام أدوات وفحصٍ آلي ويدويّ، وكيفية إصلاحها وتضمين الحماية في دورة تطوير البرمجيات. مصدر التعريفات والإرشادات العملية الأساسي: OWASP Top-10 وCheat-Sheets وWSTG.
بعد إتمام الوحدة يتوقع أن يكون المتدرّب قادرًا على:
ملاحظة: OWASP Top-10 (2021) هو مرجعيّة مخصّصة للوعي ولتوجيه المطورين ومدققي الأمان — راجع الصفحة الرسمية للمزيد من التفصيل: OWASP Top 10 Official Page.
ما هي؟ فشل في فرض سياسات التفويض (authorization) يسمح لمهاجم بالوصول أو تعديل موارد ليس لديه صلاحية لها. OWASP Link
كيف تحدث؟ أمثلة: اعتراض معرّفات موارد (IDs) وتغييرها (IDOR)، إبقاء واجهات إدارية مكشوفة، عدم التحقق من العلاقة بين المستخدم والموارد.
مثال بسيط (IDOR):
GET /invoices/view?id=123
إذا سمح التطبيق لأي مستخدم بقراءة أي id دون فحص علاقته بالمستخدم، فمهاجم يغير id إلى 124 ويطلع على فواتير مستخدم آخر.
الاكتشاف: اختبار يدوي (تفكير هجومي)، فحص endpoints باستخدام Burp / ZAP، فحص قواعد الوصول في الكود ومراجعات Authorization. PortSwigger | OWASP WSTG
التصحيح / الحماية:
ما هي؟ استخدام تشفير ضعيف، عدم تشفير بيانات حساسة، إدارة مفاتيح سيئة، أو استخدام تجزئات/خوارزميات مهترئة. OWASP Link
أمثلة شائعة: تخزين كلمات المرور بنص واضح، استخدام MD5/SHA1 كـ password hashing، تخزين مفاتيح في الكود.
المثال & الحل: استخدم تجزئة آمنة مع salt مثل bcrypt/Argon2 لحفظ كلمات المرور؛ لا تستخدم تشفير قابل للعكس لتخزين كلمات المرور. استخدم خدمات إدارة مفاتيح (KMS) بدلًا من متغيّرات بيئة مكشوفة. راجع Cryptographic Storage Cheat Sheet: OWASP Cheat Sheet Series
أداة التحقق: مراجعة الكود (SAST) للتأكد من خلو المشروع من استخدامات خوارزميات/نماذج ضعيفة.
ما هي؟ إدخال بيانات من المستخدم تُعامل كأوامر/استعلامات مما يسمح للمهاجم بحقن استعلامات أو أوامر ضارة. OWASP Cheat Sheet Series
مثال تعليقي لنمط SQL-i:
مدخل: username = ' OR '1'='1 يؤدي لتجاوز التحقق إذا استُخدمت عبارات سلسلة مباشرة.
Payload بسيط: '; DROP TABLE users; -- (لأغراض تعليمية داخل بيئة مختبرية فقط).
الاكتشاف: أدوات مثل sqlmap وDAST (Burp / ZAP) تكشف نقاط الإدخال الضعيفة. sqlmap.org | PortSwigger
الحماية:
مثال كود (Python + SQLite — parameterized):
# خطأ: تجميع سلسلة
# cursor.execute(f"SELECT * FROM users WHERE username='{u}' AND pass='{p}'")
# صحيح: parameterized
cursor.execute("SELECT * FROM users WHERE username=? AND pass=?", (u, p))
ما هي؟ ضعف في مستوى التصميم المعماري والتخطيط الأمني (absence of secure design patterns, threat-modeling). OWASP Link
الأسباب: غياب نمذجة التهديد (Threat Modeling)، متطلبات أمنية غير واضحة، اعتماد كبير على مكونات خارجية دون تقييم.
المعالجة: إدراج Threat Modeling في المراحل المبكرة، تبنّي أنماط Secure Design (defense-in-depth، least-privilege) وASVS/architecture reviews. راجع WSTG وممارسات التصميم الآمن: OWASP WSTG - Design.
ما هي؟ إعدادات غير مُحكَمَة عبر الخادم/التطبيق/قاعدة البيانات/السحابة (المخلفات الافتراضية، أخطاء في الCORS، رؤوس الأمان مفقودة). OWASP Link
أمثلة: صفحات الخطأ التي تُظهر Stack Traces، لوحات إدارة مكشوفة، إعدادات TLS غير صحيحة، سياسات CORS ممتدة.
الحماية: تشديد الإعدادات (Harden images, remove default accounts), ضبط رؤوس الأمان (HSTS, X-Content-Type-Options, X-Frame-Options, CSP)، واختبارات المزامنة مع CI/CD. راجع HTTP Headers Cheat Sheet: OWASP Cheat Sheet Series.
ما هي؟ استخدام مكتبات أو خدمات قديمة بها ثغرات (مثل مكتبة JS قديمة أو صورة حاوية غير محدثة). OWASP Link
مخاطر: مهاجمون يستغلون ثغرات في المكتبات للوصول أو تنفيذ تعليمات عن بُعد.
الإجراءات: سياسة تحديث دوري، استخدام SCA (Software Composition Analysis) مثل OWASP Dependency-Check أو أدوات سحابية لفحص الـ dependencies.
ما هي؟ ضعف في آليات تسجيل الدخول، إدارة الجلسات (sessions) أو تنفيذ سيء للمصادقة (مثل كلمات مرور ضعيفة، عدم وجود حماية ضد credential stuffing). OWASP Link
الحماية: تطبيق مصادقة متعددة العوامل (MFA)، حماية ضد credential-stuffing (rate-limiting, IP-reputation)، استخدام جلسات آمنة (Secure, HttpOnly, SameSite cookies) ومراجعة سياسات "reset password". راجع Authentication Cheat Sheet وCredential Stuffing Prevention: OWASP Authentication Cheat Sheet | OWASP Credential Stuffing Prevention.
ما هي؟ فشل ضمان سلامة البرامج/المكونات أثناء التحديث أو تحميل المكونات من مصادر لا تُظهر سلامتها (مثال: تحميل حزم npm بدون تحقق من التوقيع). OWASP Link
التعويض: التحقق من التواقيع الرقمية، استخدام SLSA, التحقق من checksums والتوقيع عند تحديث الحزم، استخدام سياسة عدم السماح لتنفيذ ملفات غير موثوقة.
ما هي؟ غياب سجلات كافية أو مراقبة تؤدي لتأخر اكتشاف الحوادث أو عدم وجود بيانات لعبور التحقيق (forensics). OWASP Link
ما يجب تطبيقه: سجلات مركزية (SIEM)، رصد محاولات الاستغلال والـAlerts، retention مناسب للسجلات، واختبارات كشف التسلل. راجع WSTG للاختبارات المنهجية: OWASP WSTG - Logging and Monitoring.
ما هي؟ التطبيق يقوم بطلبات HTTP مُنشأة بواسطة مدخلات المستخدم إلى موارد داخلية/خارجية دون تحقق، ما يتيح الوصول إلى شبكات داخلية أو خدمات حساسة. OWASP Link
مثال: واجهة تحميل عنوان URL تعرض محتوى خارجي، مهاجم يقدم http://169.254.169.254/latest/meta-data/ للوصول إلى بيانات instance metadata في بيئات السحابة.
الحماية: تقييد الوجهات المسموح بها (allowlist), التحقق من URLs، منع الشبكات الداخلية في الطلبات الصادرة، واستخدام WAF/Proxy لحماية هذا النوع من الطلبات.
// ضع مدخلات المستخدم في prepared statement
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $user_input_email]);
$user = $stmt->fetch();
// عند عرض قيمة في HTML
echo htmlspecialchars($user_input, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
(بالإضافة إلى استخدام Content Security Policy على مستوى الرأسّات للحد من تحميل السكربتات غير الموثوقة). راجع XSS Prevention Cheat Sheet: OWASP XSS Prevention Cheat Sheet.
# تحقق أن 'resource.owner_id' == current_user.id قبل الارجاع/التعديل
if resource.owner_id != current_user.id:
abort(403) # Forbidden
الوحدة الرابعة هي قلب الجانب العملي في أمن التطبيقات: فهم هذه الفئات (OWASP Top-10) وتمارين التطبيقية عليها تمنح المتدرب قدرة فعلية على اكتشاف المخاطر وإصلاحها ورفع مستوى الأمان داخل دورة حياة تطوير البرمجيات. ابدأ بالمفاهيم ثم انتقل للتمارين العملية في Juice Shop/DVWA مع أدوات مثل Burp وZAP، ودوّن دائمًا خطواتك وطرق إصلاحك لكتابة تقرير احترافي.