خطوات الاستخدام
الخطوة الأولى: تحديد عدد حقول الإدخال في التطبيق. يشير هذا الرقم إلى عدد النقاط التي يمكن للمهاجم من خلالها إدخال بيانات ضارة (مثل نماذج تسجيل الدخول، البحث، أو التعليقات). كلما زاد عدد الحقول، زاد سطح الهجوم المحتمل. في هذه الآلة الحاسبة، يتم استخدام هذا الرقم لحساب الاحتمالية الأولية للخطر: P_input = عدد الحقول / (عدد الحقول + 10). على سبيل المثال، إذا كان لديك 5 حقول، فستكون P_input = 5/15 ≈ 0.3333.
الخطوة الثانية: تحديد ما إذا كان التطبيق يستخدم استعلامات مُعلمة (Parameterized Queries). الاستعلامات المُعلمة هي تقنية تمنع حقن SQL عن طريق فصل البيانات عن الأمر SQL. إذا كان الجواب 'نعم'، يتم تطبيق عامل تخفيض المخاطر بنسبة 70% (أي يضرب الاحتمال في 0.3). إذا كان 'لا'، يبقى الاحتمال كما هو. هذا المعامل مشتق من الإحصاءات التي تشير إلى أن استخدام الاستعلامات المُعلمة يقلل من خطر حقن SQL بنسبة تصل إلى 70%.
الخطوة الثالثة: تحديد ما إذا كان التطبيق يستخدم إطار عمل ORM (Object-Relational Mapping). أطر العمل مثل Hibernate أو Entity Framework توفر طبقة تجريد تمنع التعامل المباشر مع SQL، مما يقلل المخاطر. إذا كان الجواب 'نعم'، يتم تطبيق عامل تخفيض إضافي بنسبة 40% (أي يضرب الاحتمال في 0.6). إذا كان 'لا'، يبقى الاحتمال كما هو. يُلاحظ أن استخدام ORM غالبًا ما يكون مصحوبًا باستعلامات مُعلمة، لذا يتم تطبيق التخفيضات بشكل تراكمي.
الخطوة الرابعة: حساب الاحتمال النهائي. الصيغة هي: P_final = P_input * (مُعامل الاستعلامات المُعلمة) * (مُعامل ORM). على سبيل المثال، مع 5 حقول، واستخدام استعلامات مُعلمة (0.3) وبدون ORM (1.0): P_final = 0.3333 * 0.3 * 1.0 = 0.1 (أي 10%). يتم عرض النتيجة كنسبة مئوية.
أمثلة محلولة
تطبيقات عملية على مخاطر حقن SQL بخطوات الحل كاملة.
الحل
أولاً، نحسب الاحتمال الأولي بناءً على عدد الحقول: P_input = 3 / (3 + 10) = 3/13 ≈ 0.2308. نظرًا لأنهم يستخدمون استعلامات مُعلمة، نضرب في 0.3: P_after_parameterization = 0.2308 * 0.3 = 0.0692. نظرًا لعدم استخدام ORM، يظل المعامل 1.0. إذن الاحتمال النهائي = 0.0692، أي حوالي 6.92%. هذا يعني أن التطبيق لديه احتمال منخفض للغاية للتعرض لحقن SQL بفضل استخدام الاستعلامات المُعلمة. ومع ذلك، من المهم ملاحظة أنه حتى مع الاستعلامات المُعلمة، قد توجد ثغرات أخرى مثل حقن SQL من الدرجة الثانية أو أخطاء في المنطق، لذا يجب دائمًا إجراء اختبارات أمنية إضافية.
الحل
أولاً: P_input = 20 / (20 + 10) = 20/30 = 0.6667. نظرًا لعدم استخدام استعلامات مُعلمة، لا يوجد تخفيض أولي (المعامل = 1.0). ومع ذلك، يستخدمون ORM: المعامل = 0.6. إذن P_final = 0.6667 * 1.0 * 0.6 = 0.4 (40%). هذا احتمال مرتفع نسبيًا. إذا كانوا قد استخدموا أيضًا الاستعلامات المُعلمة، لكان P_final = 0.6667 * 0.3 * 0.6 = 0.12 (12%). الفرق كبير: 40% مقابل 12%. توضح هذه المقارنة أن الاعتماد على ORM وحده ليس كافيًا؛ فالاستعلامات المُعلمة توفر حماية أقوى. في الواقع، العديد من أطر ORM تستخدم الاستعلامات المُعلمة داخليًا، ولكن إذا قام المطورون بكتابة استعلامات مخصصة (Native Queries) داخل ORM، فقد يتجاوزون هذه الحماية. لذلك، من المهم ضمان استخدام الاستعلامات المُعلمة حتى داخل ORM.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة مخاطر حقن SQL.
مرجع — 3 حقول مع معلمة: 6.92%
- عدد حقول الإدخال
- 3
- يستخدم استعلامات معلمة
- نعم
- يستخدم ORM
- لا
مرجع — 20 حقلاً بـORM فقط: 40%
- عدد حقول الإدخال
- 20
- يستخدم استعلامات معلمة
- لا
- يستخدم ORM
- نعم
مرجع — 20 حقلاً مع الاثنين: 12%
- عدد حقول الإدخال
- 20
- يستخدم استعلامات معلمة
- نعم
- يستخدم ORM
- نعم
مرجع — مثال الخطوة الرابعة: 10%
- عدد حقول الإدخال
- 5
- يستخدم استعلامات معلمة
- نعم
- يستخدم ORM
- لا
مرجع — بلا حماية: 50%
- عدد حقول الإدخال
- 10
- يستخدم استعلامات معلمة
- لا
- يستخدم ORM
- لا
مرجع — ألف حقل: 99.01% دون تجاوز المئة
- عدد حقول الإدخال
- 1,000
- يستخدم استعلامات معلمة
- لا
- يستخدم ORM
- لا
مرجع — لا حقول إدخال: 0%
- عدد حقول الإدخال
- 0
- يستخدم استعلامات معلمة
- لا
- يستخدم ORM
- لا