كيفية منع SQL Injection و XSS: دليل الوقاية الكامل مع الكود
منع هجمات SQL injection و NoSQL injection و XSS مع أنماط كود مُتحقق منها. يغطي الاستعلامات المعاملة وتعقيم المدخلات وتكوين CSP.
مقدمة
تظل هجمات الحقن أخطر ثغرات تطبيقات الويب. تحدث عندما يُرسل بيانات غير موثوقة إلى مُفسر كجزء من أمر أو استعلام.
منع حقن SQL
الاستعلامات المعلمة
// ❌ أبداً: دمج السلاسل const query = `SELECT * FROM users WHERE email = '${email}'`; // ✅ دائماً: الاستعلامات المعلمة const result = await pool.query( 'SELECT * FROM users WHERE email = $1', [email] ); // باستخدام Prisma const user = await prisma.user.findUnique({ where: { email }, });
بناء الاستعلام الديناميكي
function buildSearchQuery(filters: SearchFilters) { let query = knex('products').select('*'); if (filters.category) { query = query.where('category', filters.category); } // ترتيب ديناميكي آمن const allowedSortFields = ['name', 'price', 'created_at']; if (filters.sortBy && allowedSortFields.includes(filters.sortBy)) { query = query.orderBy(filters.sortBy, filters.sortOrder === 'desc' ? 'desc' : 'asc'); } return query; }
منع حقن NoSQL
// ❌ عرضة لحقن NoSQL const user = await db.collection('users').findOne({ username: req.body.username, password: req.body.password, // المهاجم يمكنه إرسال { "$gt": "" } }); // ✅ تحقق من أنواع المدخلات وعقمها const loginSchema = z.object({ username: z.string().min(1).max(50), password: z.string().min(1).max(100), }); const { username, password } = loginSchema.parse(req.body);
منع XSS
ترميز المخرجات
import DOMPurify from 'isomorphic-dompurify'; function sanitizeHtml(html: string): string { return DOMPurify.sanitize(html, { ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p'], ALLOWED_ATTR: ['href', 'title'], }); } // React يهرب تلقائياً افتراضياً function UserProfile({ user }) { return ( <div> {/* آمن */} <h1>{user.name}</h1> {/* ✅ آمن - عقم أولاً */} <div dangerouslySetInnerHTML={{ __html: sanitizeHtml(user.bio) }} /> </div> ); }
سياسة أمان المحتوى
res.setHeader('Content-Security-Policy', [ "default-src 'self'", "script-src 'self' 'nonce-...'", "frame-ancestors 'none'", ].join('; '));
الخلاصة
منع الحقن يتطلب:
- لا تثق بمدخلات المستخدم أبداً - تحقق وعقم كل شيء
- استخدم الاستعلامات المعلمة - لا تدمج SQL أبداً
- تحقق من أنواع البيانات - خاصة لـ NoSQL
- رمز المخرجات - ترميز مناسب للسياق
- نفذ CSP - دفاع متعدد الطبقات ضد XSS
الدفاع المتعدد الطبقات هو المفتاح - طبقات حماية متعددة تضمن أنه إذا فشلت واحدة، الأخرى لا تزال تحميك.
مقالات ذات صلة
هندسة الأمانقراءة 20 دقيقة
قائمة فحص أمان API: Rate Limiting والتحقق من المدخلات وتكوين CORS
تأمين APIs مع rate limiting والتحقق من المدخلات وتكوين CORS. قائمة فحص مختبرة إنتاجياً تغطي المصادقة والتشفير ومعالجة الأخطاء.
هندسة الأمانقراءة 23 دقيقة
أفضل ممارسات مصادقة JWT: Refresh Tokens و RBAC و OAuth 2.0
تنفيذ مصادقة JWT آمنة مع تدوير refresh token و RBAC وتدفقات OAuth 2.0. أنماط إنتاجية من أنظمة الرعاية الصحية والحكومة.
هندسة الأمانقراءة 17 دقيقة
أمان إدارة الجلسات: إعدادات الكوكيز وتدوير التوكن وتسجيل الخروج
تنفيذ إدارة جلسات آمنة مع إعدادات كوكيز صحيحة وتدوير التوكن وتدفقات تسجيل الخروج. يغطي تثبيت الجلسة ومنع الاختطاف والتعامل متعدد الأجهزة.
تصميم الخلفيةقراءة 20 دقيقة
بنية Laravel للمؤسسات: Repository Pattern و Service Layer و DDD
بناء تطبيقات Laravel للمؤسسات مع repository pattern و service layer ومبادئ DDD. أنماط إنتاجية من أنظمة الحكومة والرعاية الصحية.
تصميم الخلفيةقراءة 22 دقيقة
أنماط توسيع قواعد البيانات: دليل Sharding و Replication و Partitioning
توسيع قواعد البيانات مع sharding و replication و partitioning. يغطي أنماط توسيع PostgreSQL و MySQL و MongoDB مع أرقام أداء حقيقية.