تقييم الدرس 28
مشروع: تدقيق تطبيق وإصلاح ثغراته
أجب عن الأسئلة ثم اضغط «صحّح ورقتي» في آخر الصفحة. ← العودة إلى الدرس
أسئلة التقييم
تقييم الدرس 28: مشروع: تدقيق تطبيق وإصلاح ثغراته. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) منهجية التدقيق تبدأ بـ:
2) أي ثغرة في مسار /
search هنا؟const express = require('express');const app = express();app.use(express.json());app.use(express.urlencoded({ extended: false })); const sqlite3 = require('sqlite3');const db = new sqlite3.Database(':memory:');db.serialize(() => { db.run(`CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, pass TEXT, role TEXT, email TEXT)`); db.run(`INSERT INTO users (name, pass, role, email) VALUES ('سارة', 's@rah123', 'customer', 'sara@mail.sa'), ('خالد', 'kh@led456', 'customer', 'khaled@mail.sa'), ('المدير', 'Adm!n#2025', 'admin', 'admin@mail.sa')`); db.run(`CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER)`); db.run(`INSERT INTO products (name, price) VALUES ('سماعة', 120), ('لوحة مفاتيح', 90), ('كاميرا ويب', 210)`);}); const SESSIONS = { 'tok-sara': 1, 'tok-khaled': 2 };function auth(req, res, next) { const id = SESSIONS[(req.headers.authorization || '').replace('Bearer ', '')]; if (!id) return res.status(401).json({ error: 'سجّل الدخول' }); req.userId = id; next();} // ثغرة 1: حقن SQL في البحثapp.get('/search', (req, res) => { db.all("SELECT id, name, price FROM products WHERE name LIKE '%" + req.query.q + "%'", (e, rows) => e ? res.status(500).json({ error: String(e.message) }) : res.json(rows));}); // ثغرة 2: IDOR — أي مستخدم يرى ملاحظات غيرهconst notes = [{ id: 1, userId: 1, text: 'ملاحظة سارة' }, { id: 2, userId: 2, text: 'ملاحظة خالد' }];app.get('/notes/:id', auth, (req, res) => { const n = notes.find(x => x.id === Number(req.params.id)); if (!n) return res.status(404).json({ error: 'غير موجود' }); res.json(n);}); // ثغرة 3: XSS — يعرض التعليق مدموجًا في HTMLlet comments = [];app.post('/comment', (req, res) => { comments.push(req.body.text || ''); res.status(201).json({ ok: true }); });app.get('/comments', (req, res) => { res.type('html').send('<ul>' + comments.map(c => '<li>' + c + '</li>').join('') + '</ul>');}); app.listen(3000);
3) إصلاح
IDOR في /notes/:id:4) إصلاح
XSS في /comments:5) بعد إصلاح الثغرات يجب:
2السؤال الثاني: صح أم خطأ
1) إصلاح ثغرة دون التحقق منها قد يترك الهجوم ممكنًا.
الصواب: صح
2) إصلاح ثغرة واحدة من ثلاث يكفي لتأمين التطبيق.
الصواب: خطأ
3) حقن
SQL و XSS كلاهما في فئة الحقن (A03).الصواب: صح
4)
IDOR من فئة تعطّل التحكم بالوصول (A01).الصواب: صح
5) التدقيق يُمرّر المسارات على قائمة
OWASP.الصواب: صح
3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة
1) إصلاح حقن
SQL يكون بالاستعلام .الإجابة: المعلَّم
2) إصلاح
IDOR بشرط والرد 404.الإجابة: الملكية
3) إصلاح
XSS بترميز .الإجابة: المخرجات
4السؤال الرابع: أسئلة عملية
1) لكل ثغرة يُختبر: هجوم يُرفض، واستخدام عادي ينجح.
الصواب: صح
2) ثغرة واحدة متبقية في التطبيق تكفي لاختراقه.
الصواب: صح
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».