6.8 SQL - Injection
هجوم SQL Injection
هجوم SQL Injection هو نوع من الهجمات يُستغل فيه ثغرات في استعلامات SQL لسرقة أو تعديل أو تدمير البيانات الموجودة في قاعدة البيانات.
🛑 هذا الهجوم غالبًا يحدث عندما يتم إدخال مدخلات المستخدم مباشرة داخل استعلام SQL بدون أي فلترة أو حماية.
🔍 مثال غير آمن:
لنفرض عندنا استعلام يستخدم اسم المستخدم وكلمة المرور كالتالي:
SELECT * FROM Users WHERE Username = 'admin' AND Password = '1234'; لو المستخدم كتب التالي في خانة كلمة المرور:
' OR '1'='1 الاستعلام هيبقى كالتالي:
SELECT * FROM Users WHERE Username = 'admin' AND Password = '' OR '1'='1'; ⬅ النتيجة؟ يرجع كل الصفوف لأن الشرط '1'='1' دائمًا صحيح!
🔐 كيف نحمي أنفسنا؟
- استخدم Parameters: في ADO.NET أو PDO أو غيرها من التقنيات.
- لا تبني الاستعلامات بسلاسل نصية من مدخلات المستخدم.
- استخدم Stored Procedures إن أمكن.
- فلترة مدخلات المستخدم: امنع إدخال أوامر ضارة أو رموز اقتباس.
✅ مثال باستخدام Parameterized Query في C#
string query = "SELECT * FROM Users WHERE Username = @username AND Password = @password"; SqlCommand cmd = new SqlCommand(query, connection); cmd.Parameters.AddWithValue("@username", usernameInput); cmd.Parameters.AddWithValue("@password", passwordInput); ⬅ هنا يتم إرسال القيم بأمان بدون دمجها مباشرة داخل الاستعلام.
💡 ملاحظات:
- SQL Injection من أخطر الثغرات الأمنية الشائعة في تطبيقات الويب.
- يجب دائمًا كتابة الكود مع أخذ الأمان بعين الاعتبار منذ البداية.
تعليقات
إرسال تعليق