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 من أخطر الثغرات الأمنية الشائعة في تطبيقات الويب.
  • يجب دائمًا كتابة الكود مع أخذ الأمان بعين الاعتبار منذ البداية.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

Entity Framework - مقدمة عن Entity Framework