حقن SQL وحقن الأوامر
تعلّم كيف يصوغ المهاجمون حمولات حقن تتلاعب باستعلامات قواعد البيانات أو أوامر نظام التشغيل، وكيف تمنعها الاستعلامات ذات المعلمات والتحقق من المدخلات.
حقن SQL وحقن الأوامر درس مجاني في Security+ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Security+ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Security+ Academy 4 دروس في المجموع.
ما هو SQL Injection؟
تحدث حقن SQL (SQLi) عندما يُدرج المهاجم شيفرة SQL ضارة أو «يحقنها» في حقل إدخال يُمرَّر لاحقًا إلى استعلام قاعدة بيانات. ولأن التطبيق يضمّن إدخال المستخدم مباشرةً في عبارة SQL، فلا تستطيع قاعدة البيانات التمييز بين البيانات المشروعة والأوامر التي يزوّدها المهاجم. ويحتل SQLi باستمرار مرتبة ضمن أخطر ثغرات الويب في OWASP Top 10.
مثال على حمولة SQLi التقليدية
قد يبدو استعلام تسجيل الدخول الضعيف كما يلي: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. ويؤدي إدخال المهاجم ' OR '1'='1 بوصفه اسم المستخدم إلى تحويل الاستعلام بحيث يكون شرط WHERE صحيحًا دائمًا، متجاوزًا المصادقة بالكامل. وهذا هو الحقن القائم على الحشو المنطقي التقليدي.
-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
AND password = 'anything';
-- Returns ALL rows — auth bypassedأنواع حقن SQL
تأتي هجمات حقن SQL في عدة أشكال: يعيد حقن SQL داخل النطاق (In-band SQLi) النتائج مباشرةً في استجابة HTTP (قائم على الأخطاء أو قائم على UNION). ويستنتج حقن SQL الأعمى (Blind SQLi) البيانات من خلال استجابات منطقية صحيحة/خاطئة أو تأخيرات زمنية متعمدة (SLEEP(5)). ويستخدم حقن SQL خارج النطاق (Out-of-band SQLi) قنوات ثانوية مثل عمليات بحث DNS لاستخراج البيانات عندما لا تكون الاستجابات مرئية.
-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeededمنع SQLi: الاستعلامات ذات المعاملات
يتمثل الدفاع الأساسي ضد حقن SQL في الاستعلامات ذات المعاملات (وتُسمى أيضًا العبارات المُعدّة). ففي الاستعلام ذي المعاملات، تُجمَّع بنية SQL أولًا، ويُمرَّر إدخال المستخدم بوصفه معاملًا منفصلًا — ولا يمكنه تغيير بنية الاستعلام مطلقًا. وهذا النهج مستقل عن اللغة وأكثر موثوقية بكثير من تنقية الإدخال وحدها.
# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
'SELECT * FROM users WHERE username=? AND password=?',
(username, password) # parameters, never concatenated
)التحقق من الإدخال كدفاع متعدد الطبقات
مع أن الاستعلامات ذات المعاملات هي الدفاع الأساسي، فإن التحقق من الإدخال يوفر طبقة ثانوية مهمة. ولا يقبل التحقق بقائمة السماح إلا المحارف المتوقعة (مثل المحارف الأبجدية الرقمية فقط في حقل اسم المستخدم)، ويرفض كل ما عداها. أما التحقق بقائمة المنع فيحظر المحارف السيئة المعروفة، لكن المهاجمين غالبًا ما يرمّزون الحمولات أو يموّهونها لتجاوز قوائم المنع — مما يجعل قوائم السماح أقوى بكثير.
ما هو Command Injection؟
يحدث حقن الأوامر (حقن أوامر نظام التشغيل) عندما يمرر التطبيق إدخال المستخدم غير المنقّى إلى shell النظام. وعلى خلاف حقن SQL الذي يستهدف قواعد البيانات، يستهدف حقن الأوامر نظام التشغيل نفسه — ما يمنح المهاجمين القدرة على تشغيل أوامر عشوائية بامتيازات عملية خادم الويب. ويُصنّف هذا النوع بدرجة خطورة حرجة، وغالبًا ما يؤدي إلى اختراق النظام بالكامل.
مثال على حقن الأوامر
قد يستخدم تطبيق ويب ينفذ ping لعنوان IP يقدمه المستخدم ما يلي: ping -c 1 INPUT. فإذا أدخل المهاجم 8.8.8.8; cat /etc/passwd، فإن shell يفسر ; على أنه فاصل أوامر وينفذ الأمرين. وتشمل عوامل تشغيل الحقن الشائعة ; و&& و|| و| واستبدال الأوامر باستخدام backtick.
# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd' # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)
# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])منع حقن الأوامر
يتمثل الدفاع الأكثر أمانًا ضد حقن الأوامر في تجنب استدعاء أوامر نظام التشغيل من إدخال المستخدم بالكامل — واستخدام دوال المكتبة التي تحقق الهدف نفسه. وعندما يتعذر تجنب استدعاءات shell، مرروا الوسائط في صورة قائمة (وليس سلسلة نصية مضمّنة أبدًا)، وعطّلوا تفسير shell، وتحققوا من الإدخال مقابل قائمة سماح صارمة، وشغّلوا العمليات باستخدام حساب المستخدم ذي أقل الامتيازات الممكنة.
سياق OWASP: الحقن ضمن قائمة العشرة الأوائل
تدرج قائمة OWASP للعشرة الأوائل الحقن (ويشمل حقن SQL وNoSQL ونظام التشغيل وLDAP) باعتباره أحد أخطر مخاطر أمن التطبيقات. توصي OWASP باتباع نهج الدفاع متعدد الطبقات: استخدام واجهات برمجة تطبيقات آمنة تتجنب المفسّر، وإجراء تحقق إيجابي من المدخلات على جانب الخادم باستخدام قائمة السماح، وتهريب الأحرف الخاصة باستخدام الصياغة الخاصة بذلك المفسّر، واستخدام عناصر تحكم في SQL مثل LIMIT لمنع الكشف الجماعي عن البيانات.
الكشف: جدران حماية تطبيقات الويب والتسجيل
يمكن لـجدار حماية تطبيقات الويب (WAF) اكتشاف حمولات الحقن الشائعة وحظرها من خلال فحص طلبات HTTP ومقارنتها بأنماط التوقيعات. ومع ذلك، يمكن تجاوز جدران حماية تطبيقات الويب باستخدام حيل الترميز، كما أنها لا تُغني عن كتابة تعليمات برمجية آمنة. يتيح تسجيل أحداث التطبيق بشكل صحيح — أي تسجيل معلمات الاستعلام، ورموز الاستجابة، ورسائل الخطأ — لفرق الأمن تحديد محاولات الحقن أثناء مراجعة الحوادث.
التأثير الواقعي لهجمات الحقن
تسببت هجمات الحقن في بعض أكبر عمليات اختراق البيانات في التاريخ. فقد أدى اختراق Equifax عام 2017 إلى كشف 147 مليون سجل بسبب ثغرة في تطبيق ويب. كما أدى حقن SQL ضد شبكة Sony PlayStation Network إلى اختراق 77 مليون حساب عام 2011. توضح هذه الحوادث أن ثغرات الحقن تخلّف تأثيرًا بالغًا على الأعمال: إذ يتبع نجاح هجوم الحقن سرقة البيانات، والغرامات التنظيمية، والإضرار بالسمعة، والمسؤولية القانونية.
تحقق سريع
اختبر مدى فهمك لمفاهيم CompTIA Security+ (SY0-701) الواردة في هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس أن: حقن SQL يستغل المدخلات غير المنقّاة والمضمّنة في استعلامات قاعدة البيانات، وأن حقن الأوامر يمرر مدخلات ضارة إلى صدفة نظام التشغيل عبر عوامل تشغيل مثل ; و|، وأن الاستعلامات ذات المعلمات وتجنب shell=True هما وسيلتا الدفاع الأساسيتان. سننتقل بعد ذلك إلى استكشاف هجمات البرمجة النصية عبر المواقع (XSS) وتزوير الطلبات عبر المواقع (CSRF).
الأسئلة الشائعة
هل درس «حقن SQL وحقن الأوامر» مجاني؟
نعم — نص درس «حقن SQL وحقن الأوامر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Security+ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Security+ Academy 4 دروس في المجموع.
ماذا ستتعلم في «حقن SQL وحقن الأوامر»؟
تعلّم كيف يصوغ المهاجمون حمولات حقن تتلاعب باستعلامات قواعد البيانات أو أوامر نظام التشغيل، وكيف تمنعها الاستعلامات ذات المعلمات والتحقق من المدخلات. تتمرن على Security+ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Security+ Academy؟
لا تُشترط خبرة سابقة. Security+ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «حقن SQL وحقن الأوامر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Security+ Academy هذا؟
نعم. كل درس في Security+ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حقن SQL وحقن الأوامر
- البرمجة النصية عبر المواقع (XSS) وCSRF
- المصادقة المعطّلة وإلغاء التسلسل غير الآمن
- دورة حياة تطوير البرمجيات الآمنة وأدوات SAST وDAST