تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

أساسيات أمن الويب وفق OWASP: XSS والحقن وCSRF والإعدادات الخاطئة

درسنُشر ٢٤ أكتوبر ٢٠٢٦ · 0 رد · 2 مشاهدة#أمان#owasp#xss#csrf
قبل ساعتين

مقدمة

قائمة OWASP Top 10 تلخص أكثر المخاطر شيوعاً في تطبيقات الويب. ليست قائمة نهائية، لكنها نقطة بداية ممتازة: معظم الاختراقات الحقيقية تستغل أخطاء معروفة منذ سنوات. هذا الدرس يشرح أهمها بأمثلة ودفاعات عملية، في سياق حماية تطبيقك أنت.

أهداف التعلم

  • فهم XSS ومنعه بالترميز الصحيح وCSP.
  • منع الحقن (SQL والأوامر).
  • فهم CSRF وحماياته.
  • ضبط الترويسات والإعدادات الآمنة.

1. XSS: عندما يصبح نص المستخدم كوداً

إن عرضت تعليقاً كما هو داخل HTML:

container.innerHTML = comment.body;   // خطر

فتعليق يحتوي <img src=x onerror=alert(document.cookie)> سينفذ JavaScript في متصفح كل زائر.

الدفاعات:

  • رمّز الإخراج حسب السياق. أطر العمل الحديثة (React وغيره) ترمّز النصوص تلقائياً: <p>{comment.body}</p> آمن.
  • تجنب innerHTML وdangerouslySetInnerHTML. إن احتجت HTML من المستخدم (Markdown مثلاً) فحوّله بمكتبة ثم عقّمه بقائمة وسوم مسموحة (مثل DOMPurify).
  • CSP (سياسة أمان المحتوى) طبقة ثانية تمنع تنفيذ السكربتات غير المصرح بها حتى لو تسرب وسم:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-R4nd0m'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'
  • ملفات تعريف الارتباط للجلسة بـ HttpOnly حتى لا يقرأها السكربت.

2. الحقن

SQL: لا تدمج المدخلات في نص الاستعلام؛ استخدم الاستعلامات المعلّمة:

await db.query('SELECT * FROM topics WHERE slug = $1', [slug]);

الأوامر: لا تمرر مدخلات إلى shell:

// خطر: exec(`ping -c 1 ${host}`)
execFile('ping', ['-c', '1', host]);   // الوسائط مصفوفة، بلا shell

وتحقق من المدخل بقائمة مسموحة (مثلاً اسم مضيف بصيغة صحيحة فقط).

3. CSRF

موقع خبيث يجعل متصفح عضو مسجل يرسل طلباً إلى موقعك (تغيير بريد، تحويل نقاط). الحمايات:

  • ملفات تعريف الارتباط بـ SameSite=Lax أو Strict.
  • التحقق من ترويسة Origin في كل طلب يغيّر البيانات، أو رمز CSRF في النماذج.
  • العمليات المغيّرة بـ POST/PUT/DELETE فقط، لا GET.

4. الإعدادات الخاطئة والترويسات

Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
  • أطفئ رسائل الأخطاء التفصيلية ووضع التطوير في الإنتاج.
  • لا تكشف لوحات الإدارة أو قواعد البيانات أو منافذ الخدمات الداخلية للإنترنت.
  • حدّث التبعيات وافحصها (npm audit، Dependabot).

5. المكونات الضعيفة والتسجيل

  • التبعيات القديمة من أكثر الطرق شيوعاً للاختراق؛ اجعل تحديثها روتيناً.
  • التسجيل والمراقبة: سجّل محاولات الدخول الفاشلة وتغييرات الصلاحيات، دون تسجيل كلمات مرور أو رموز.

6. الدفاع بالعمق

لا تعتمد على طبقة واحدة: تحقق من المدخلات، ورمّز الإخراج، وCSP، وصلاحيات دنيا لحساب قاعدة البيانات، ومراقبة. فشل طبقة لا يعني الاختراق.

تمرين عملي (على تطبيقك أو بيئة تدريب)

  1. ثبّت تطبيق تدريب مقصود الثغرات مثل OWASP Juice Shop محلياً (docker run --rm -p 3000:3000 bkimminich/juice-shop) — على جهازك فقط.
  2. ابحث عن XSS في حقل بحث، ثم اكتب كيف كان يجب أن يُرمّز الإخراج.
  3. افحص ترويسات موقعك بأداة مثل securityheaders.com، وأضف CSP وHSTS.

تنبيه: اختبر فقط تطبيقاتك أو البيئات المصممة للتدريب أو الأنظمة التي لديك إذن مكتوب باختبارها.

أخطاء شائعة

  • الاعتقاد أن التحقق من المدخلات وحده يمنع XSS (الترميز عند الإخراج هو الأساس).
  • CSP بـ unsafe-inline في script-src فتفقد معظم فائدتها.
  • عمليات تغيير بيانات عبر GET.
  • ترك التبعيات دون تحديث لسنوات.

الخلاصة

رمّز الإخراج وعقّم HTML المسموح، استخدم الاستعلامات المعلّمة ولا shell، احمِ من CSRF، اضبط الترويسات، حدّث التبعيات، وابنِ دفاعاً بطبقات متعددة.

مصادر مقترحة

  • OWASP Top 10 (أحدث إصدار).
  • OWASP Cheat Sheet Series (XSS Prevention، SQL Injection Prevention، CSRF Prevention).
  • OWASP Juice Shop للتدريب العملي.

الرد على الموضوع

سجّل الدخول للمشاركة في النقاش.

نقاشات مشابهة