اختبار لضعف حقن SQL

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

المسح التلقائي SQL المسح

أحد الاحتمالات هو استخدام ماسح ثغرة أمنية للتطبيقات الآلية على الويب ، مثل WebInspect من HP ، أو AppScan من IBM أو Cailic's Hailstorm. تقدم هذه الأدوات طرقًا آلية سهلة لتحليل تطبيقات الويب الخاصة بك للتعرف على ثغرات أمنية ممكنة في SQL. ومع ذلك ، فهي باهظة التكاليف ، حيث تصل إلى 25000 دولار لكل مقعد.

اختبارات حقن SQL اليدوي

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

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

http://myfakewebsite.com/directory.asp؟lastname=chapple&firstname=mike

يمكننا أن نفترض أن هذه الصفحة تقوم بإجراء بحث في قاعدة البيانات ، باستخدام استعلام مشابه لما يلي:

SELECT phone FROM directory WHERE lastname = 'chapple' and firstname = 'mike'

دعونا تجربة هذا قليلا. مع افتراضنا أعلاه ، يمكننا إجراء تغيير بسيط على عنوان URL الذي يختبر هجمات حقن SQL:

http://myfakewebsite.com/directory.asp؟lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+٪3e0+OR+'1'٪3d'1

إذا لم يتم حماية تطبيق الويب بشكل صحيح ضد حقن SQL ، فإنه يقوم ببساطة بتوصيل هذا الاسم الأول المزيف في عبارة SQL التي ينفذها مقابل قاعدة البيانات ، مما يؤدي إلى:

SELECT phone FROM directory WHERE lastname = 'chapple' and firstname = 'mike' AND (select count (*) from fake)> 0 OR '1' = '1'

ستلاحظ أن بناء الجملة أعلاه مختلف قليلاً عن ذلك في عنوان URL الأصلي. أخذت الحرية في تحويل المتغير المشفر لعنوان URL لمكافئات ASCII الخاصة بهم لتسهيل اتباع المثال. على سبيل المثال ،٪ 3d هو ترميز عنوان URL للحرف '='. أضفت أيضًا بعض فواصل الأسطر للأغراض المماثلة.

تقييم النتائج

يأتي الاختبار عند محاولة تحميل صفحة الويب بعنوان URL المذكور أعلاه. إذا كان تطبيق الويب يعمل بشكل جيد ، فسيؤدي ذلك إلى إزالة علامات الاقتباس المفردة من الإدخال قبل تمرير الاستعلام إلى قاعدة البيانات. سيؤدي ذلك ببساطة إلى بحث غريب عن شخص يحمل اسمه الأول يتضمن مجموعة من SQL! سترى رسالة خطأ من التطبيق مشابهة لتلك الواردة أدناه:

خطأ: لم يتم العثور على أي مستخدم باسم mike + AND + (حدد + count (*) + from + fake) +٪ 3e0 + OR + 1٪ 3d1 Chapple!

من ناحية أخرى ، إذا كان التطبيق عرضة لحقن SQL ، فإنه سيتم تمرير العبارة مباشرة إلى قاعدة البيانات ، مما يؤدي إلى أحد احتمالين. أولاً ، إذا كان خادمك يحتوي على رسائل خطأ تفصيلية مفعلة (والتي لا يجب عليك!) ، سترى شيئًا كهذا:

Microsoft OLE DB Provider for ODBC Drivers error '80040e37' [Microsoft] [ODBC SQL Server Driver] [SQL Server] اسم الكائن غير صالح 'fake'. /directory.asp ، السطر 13

من ناحية أخرى ، إذا لم يعرض خادم الويب رسائل خطأ تفصيلية ، فستتلقى خطأ أكثر عمومية ، مثل:

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

إذا تلقيت أحد الخطأين المذكورين أعلاه ، فسيكون تطبيقك عرضة لهجوم إدخال SQL! تتضمن بعض الخطوات التي يمكنك اتخاذها لحماية تطبيقاتك ضد هجمات حقن SQL: