البرنامج التعليمي لحقن SQL: تعلم باستخدام المثال

⚡ ملخص ذكي

يُعدّ هجوم حقن SQL هجومًا يُفسد استعلامات SQL الديناميكية لتجاوز المصادقة أو كشف البيانات، مستغلًا تطبيقات الويب التي تُنشئ استعلامات من مدخلات المستخدم غير المُعالجة. توضح هذه الصفحة آلية عمل هذا الهجوم وكيفية الوقاية منه.

  • 💉 فريف: يقوم حقن SQL بإدخال استعلام SQL خبيث من خلال حقل إدخال غير مُدقَّق.
  • 🔓 تأثير: يمكن للهجوم الناجح تجاوز عمليات تسجيل الدخول وقراءة السجلات أو تعديلها أو حذفها.
  • 🧪 على سبيل المثال: شرط صحيح دائمًا بالإضافة إلى تعليق يحول عملية التحقق من تسجيل الدخول إلى عملية تجاوز.
  • 🛠️ الأدوات: تقوم SQLMap و jSQL بأتمتة اكتشاف واستغلال المعلمات القابلة للحقن.
  • 🛡️ الوقاية: تعمل الاستعلامات ذات المعلمات، والتحقق من صحة المدخلات، وحسابات أقل الامتيازات على سد الفجوة.
  • 🤖 الحافة الحديثة: تقوم الماسحات الضوئية وجدران الحماية المدعومة بالذكاء الاصطناعي بتحديد أنماط الحقن التي تغفلها التوقيعات الثابتة.

برنامج تعليمي حول حقن SQL

ما هو حقن SQL؟

يُعدّ هجوم حقن SQL هجومًا يُفسد عبارات SQL الديناميكية عن طريق تعطيل أجزاء معينة منها أو إضافة شرط يكون صحيحًا دائمًا. ويستغل هذا الهجوم عيوب التصميم في تطبيقات الويب سيئة التصميم لاستغلال عبارات SQL وتنفيذ تعليمات برمجية خبيثة.

تُعدّ البيانات أحد أهمّ عناصر نظم المعلومات. وتستخدم المؤسسات تطبيقات الويب التي تعتمد على قواعد البيانات للحصول على البيانات من عملائها. SQL هو اختصار لـ لغة الاستعلام الهيكلية. يتم استخدامه لاسترجاع البيانات ومعالجتها في قاعدة البيانات.

رسم تخطيطي يوضح كيفية تلاعب هجوم حقن SQL باستعلام قاعدة بيانات ديناميكي

كيف يعمل هجوم حقن SQL؟

تختلف أنواع الهجمات التي يمكن تنفيذها باستخدام حقن SQL باختلاف نوع محرك قاعدة البيانات. وتستهدف هذه الهجمات عبارات SQL الديناميكية، وهي عبارات تُنشأ أثناء التشغيل باستخدام معلمات مُمررة من نموذج ويب أو سلسلة استعلام URI.

مثال حقن SQL

لنفترض وجود تطبيق ويب بسيط يحتوي على نموذج تسجيل دخول. يظهر رمز نموذج HTML أدناه.

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

هنا،

  • يقبل النموذج أعلاه عنوان البريد الإلكتروني وكلمة المرور، ثم يرسلهما إلى PHP الملف المسمى Index.php.
  • يحتوي على خيار لتخزين جلسة تسجيل الدخول في ملف تعريف ارتباط. استنتجنا ذلك من خانة اختيار "تذكرني". يستخدم طريقة POST لإرسال البيانات. هذا يعني أن القيم لا تُعرض في URL.

لنفترض أن العبارة الموجودة في الواجهة الخلفية للتحقق من معرف المستخدم هي كما يلي.

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

هنا،

  • يستخدم البيان أعلاه قيم مصفوفة $_POST[] مباشرة دون تنظيفها.
  • يتم تشفير كلمة المرور باستخدام خوارزمية MD5.

سنوضح هجوم حقن SQL باستخدام SQL Fiddle. افتح ال URL http://sqlfiddle.com/ في متصفح الويب الخاص بك، ستظهر لك النافذة التالية.

ملاحظة: سيتعين عليك كتابة عبارات SQL.

فارغ SQL Fiddle نافذة جاهزة للمخطط والاستعلام

الخطوة 1) أدخل هذا الرمز في الجزء الأيسر.

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
  
insert into users (email,password) values ('m@m.com',md5('abc'));

الخطوة 2) انقر فوق "إنشاء المخطط".

الخطوة 3) أدخل هذا الرمز في الجزء الأيمن.

select * from users;

الخطوة 4) انقر فوق تشغيل SQL. سترى النتيجة التالية.

SQL Fiddle النتيجة التي تُظهر سجل المستخدم الفردي الذي تم إرجاعه

لنفترض أن المستخدم أدخل admin@admin.sys وكلمة المرور 1234. ستكون العبارة التي يتم تنفيذها على قاعدة البيانات كالتالي:

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

يمكن استغلال الكود أعلاه عن طريق حذف جزء كلمة المرور وإضافة شرط يكون صحيحًا دائمًا. لنفترض أن المهاجم أدخل البيانات التالية في حقل عنوان البريد الإلكتروني.

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

xxx لكلمة المرور.

سيكون البيان الديناميكي الذي تم إنشاؤه كما يلي.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

هنا،

  • xxx@xxx.xxx وينتهي بعلامة اقتباس مفردة تُكمل سلسلة الاقتباس.
  • OR 1 = 1 الحد 1 هو الشرط الذي سيكون صحيحًا دائمًا ويحدد النتائج التي يتم إرجاعها بسجل واحد فقط.
  • - 'و... هو تعليق SQL الذي يلغي جزء كلمة المرور.

انسخ عبارة SQL المذكورة أعلاه والصقها في SQL Fiddle قم بتشغيل مربع نص SQL كما هو موضح أدناه.

SQL Fiddle إرجاع السجل بعد تنفيذ الشرط المُضاف

نشاط القرصنة: حقن SQL لتطبيق ويب

لدينا تطبيق ويب بسيط في http://www.techpanda.org/ هذا النموذج عرضة لهجمات حقن SQL لأغراض التوضيح فقط. تم استخراج كود نموذج HTML أعلاه من صفحة تسجيل الدخول. يوفر التطبيق إجراءات أمان أساسية مثل تنظيف حقل البريد الإلكتروني. هذا يعني أنه لا يمكن استخدام الكود المذكور أعلاه لتجاوز عملية تسجيل الدخول.

ولتجاوز ذلك، نستغل حقل كلمة المرور بدلاً من ذلك. يوضح الرسم البياني أدناه الخطوات التي يجب اتباعها.

مخطط انسيابي لخطوات إدخال حقل كلمة المرور في نموذج تسجيل الدخول

لنفترض أن المهاجم قدم المدخلات التالية.

  • الخطوة 1: أدخل xxx@xxx.xxx كعنوان البريد الإلكتروني
  • الخطوة 2: أدخل xxx') أو 1 = 1 — ]

نموذج تسجيل الدخول مع إدخال سلسلة الحقن في حقل كلمة المرور

  • انقر فوق الزر إرسال.
  • سيتم توجيهك إلى لوحة المعلومات.

ستكون عبارة SQL المُنشأة كما يلي.

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

يوضح الرسم البياني أدناه كيفية إنشاء البيان.

شرح تفصيلي لكيفية إنشاء عبارة SQL المُدخلة

هنا،

  • يفترض البيان بذكاء استخدام تشفير MD5.
  • أكمل علامة الاقتباس المفردة والقوس الختامي.
  • يُلحق شرطًا بالعبارة التي ستكون صحيحة دائمًا.

بشكل عام، يجمع الهجوم الناجح بين عدة تقنيات مثل تلك الموضحة أعلاه.

أنواع أخرى من هجمات حقن SQL

يمكن أن تتسبب هجمات حقن SQL في أضرار تتجاوز مجرد تجاوز خوارزميات تسجيل الدخول. ومن بين هذه الهجمات:

  • حذف البيانات
  • تحديث البيانات
  • إدخال البيانات
  • تنفيذ الأوامر على الخادم التي يمكنها تنزيل وتثبيت البرامج الضارة مثل أحصنة طروادة
  • تصدير البيانات القيمة مثل تفاصيل بطاقة الائتمان والبريد الإلكتروني وكلمات المرور إلى الخادم البعيد للمهاجم
  • الحصول على تفاصيل تسجيل دخول المستخدم، وما إلى ذلك.
  • حقن SQL بناءً على ملفات تعريف الارتباط
  • حقن SQL على أساس الخطأ
  • حقن SQL الأعمى

القائمة أعلاه ليست شاملة؛ إنها فقط تعطيك فكرة عما يمكن أن يفعله حقن SQL.

أدوات الأتمتة لحقن SQL

في المثال أعلاه، استخدمنا أساليب هجوم يدوية استنادًا إلى معرفتنا الواسعة بلغة SQL. توجد أدوات آلية تساعدك على تنفيذ الهجمات بكفاءة أكبر وفي أقصر وقت ممكن. تشمل هذه الأدوات ما يلي:

كيفية منع هجمات حقن SQL

يمكن للمؤسسة اعتماد السياسة التالية لحماية نفسها من هجمات حقن SQL.

  • لا ينبغي الوثوق أبدًا بمدخلات المستخدم – يجب دائمًا تنظيفها قبل استخدامها في عبارات SQL الديناميكية.
  • الإجراءات المخزنة – يمكن لهذه الأدوات أن تغلف عبارات SQL وتتعامل مع جميع المدخلات كمعلمات.
  • البيانات المعدة – تعمل العبارات المُجهزة عن طريق إنشاء عبارة SQL أولاً، ثم التعامل مع جميع بيانات المستخدم المُرسلة كمعاملات. وهذا لا يؤثر على بنية عبارة SQL.
  • التعبيرات العادية – يمكن استخدام هذه الأدوات للكشف عن التعليمات البرمجية الضارة المحتملة وإزالتها قبل تنفيذ عبارات SQL.
  • حقوق وصول المستخدم إلى اتصال قاعدة البيانات – يجب منح حقوق الوصول الضرورية فقط للحسابات المستخدمة في الاتصال بقاعدة البيانات. يمكن أن يساعد هذا في تقليل ما يمكن أن تؤديه عبارات SQL على الخادم.
  • رسائل الخطأ – يجب ألا تكشف هذه الرسائل عن معلومات حساسة أو عن مكان حدوث الخطأ بالتحديد. يمكن استخدام رسائل خطأ مخصصة بسيطة مثل "عذرًا، نواجه بعض المشاكل التقنية. تم التواصل مع الفريق التقني. يرجى المحاولة مرة أخرى لاحقًا" بدلاً من عرض عبارات SQL التي تسببت في الخطأ.

نشاط القرصنة: استخدم Havij لحقن SQL

في هذا السيناريو العملي، نستخدم برنامج Havij Advanced SQL Injection لفحص موقع ويب بحثًا عن الثغرات الأمنية.

ملاحظة: هافيج قديم وغير مُحدّث Windows الأداة — SQLMap المذكورة أعلاه هي المعيار الحالي مفتوح المصدر.

ملاحظة: قد يقوم برنامج مكافحة الفيروسات لديك بتصنيفه كملف غير مرغوب فيه نظرًا لطبيعته. يجب عليك إضافته إلى قائمة الاستثناءات أو إيقاف برنامج مكافحة الفيروسات مؤقتًا. برنامج مضاد للفيروسات.

تُظهر الصورة أدناه النافذة الرئيسية لبرنامج هافيج.

النافذة الرئيسية لأداة حقن SQL من Havij

يمكن استخدام الأداة المذكورة أعلاه لتقييم مدى ثغرات موقع ويب أو تطبيق.

الأسئلة الشائعة

لا يُسمح بذلك إلا بإذن كتابي من مالك الموقع. يُعدّ اختبار تطبيق لا تملكه مخالفًا لقوانين مثل قانون الاحتيال وإساءة استخدام الحاسوب الأمريكي. وتُحدد نطاقات برامج مكافآت اكتشاف الثغرات ما هو مسموح به.

نعم. في قائمة OWASP Top 10:2025، يحتل حقن SQL المرتبة A05، ولا تزال الاختبارات تكشف عن وجوده في جميع التطبيقات تقريبًا. ومع اكتشاف آلاف الثغرات الأمنية الجديدة المتعلقة بحقن SQL سنويًا، يبقى هذا النوع من الثغرات من أبرز المخاطر التي تهدد أمن الإنترنت.

MD5 عبارة عن خوارزمية تجزئة سريعة، وليست تشفيرًا، ويمكن للمهاجمين اختراقها بسرعة باستخدام جداول قوس قزح ووحدات معالجة الرسومات. استخدم خوارزمية بطيئة مع إضافة ملح، مثل bcrypt أو Argon2، لكلمات المرور بدلاً من ذلك.

أي قاعدة بيانات يتم الاستعلام عنها من خلال لغة SQL المبنية ديناميكيًا — MySQL, PostgreSQL, Microsoft SQL Server, Oracleو SQLiteيكمن الخلل في كيفية قيام التطبيق بدمج مدخلات المستخدم في الاستعلامات، وليس في محرك قاعدة البيانات.

تتعلم جدران الحماية وأجهزة المسح الضوئي المدعومة بالذكاء الاصطناعي أنماط حركة البيانات الطبيعية، ثم تُشير إلى المدخلات الشاذة مثل الشروط أو التعليقات المُضافة في الوقت الفعلي. وتكتشف نماذج التعلم الآلي البيانات المُشفرة التي لا تستطيع التوقيعات الثابتة رصدها.

مساعدو الذكاء الاصطناعي مثل مساعد الطيار جيثب يمكن لهذه الأدوات اقتراح استعلامات مُعَلمة والتحقق من صحة المدخلات، لكنها تُعيد إنتاج أنماط غير آمنة. تعامل مع كل اقتراح كمسودة وقم بإقرانه بأداة فحص أمني ومراجعته.

يستهدف هجوم حقن SQL قاعدة البيانات عن طريق حقن استعلامات SQL في جانب الخادم. أما هجوم البرمجة النصية عبر المواقع (XSS) فيستهدف المستخدمين الآخرين عن طريق حقن نصوص برمجية تعمل في متصفحاتهم. يكشف أحدهما البيانات، بينما يخترق الآخر الجلسات.

يقوم نظام ORM (مُحوِّل الكائنات العلائقية) بإنشاء استعلامات من كائنات برمجية مع تحديد المعلمات افتراضيًا، مما يمنع معظم هجمات حقن SQL. مع ذلك، فهو ليس نظامًا مثاليًا تمامًا، إذ لا تزال الاستعلامات الخام والأساليب غير الآمنة عرضة للاختراق، لذا يبقى التحقق من صحة البيانات أمرًا بالغ الأهمية.

تلخيص هذه التدوينة بـ: