كيف تحلل CodeQL التعليمة البرمجية؟
يتطلب تنفيذ فحص التعليمة البرمجية باستخدام CodeQL فهماً لكيفية تحليل الأداة للتعليمات البرمجية.
يتكون تحليل CodeQL من ثلاث خطوات:
- إعداد التعليمات البرمجية عن طريق إنشاء قاعدة بيانات CodeQL.
- تشغيل استعلامات CodeQL مقابل قاعدة البيانات.
- تفسير نتائج الاستعلام.
في هذه الوحدة، ستتعرف على المراحل الثلاث لتحليل CodeQL.
إنشاء قاعدة البيانات
لإنشاء قاعدة بيانات، يستخرج CodeQL أولاً تمثيلاً علائقياً واحداً لكل ملف مصدر في قاعدة التعليمة البرمجية.
بالنسبة للغات المحولة برمجياً، تعمل أداة الاستخراج من خلال مراقبة عملية البناء العادية. في كل مرة يتم استدعاء مترجم لمعالجة ملف مصدر، يتم عمل نسخة من هذا الملف، ويتم جمع جميع المعلومات ذات الصلة حول التعليمة البرمجية المصدر. يتضمن ذلك البيانات النحوية حول شجرة بناء الجملة المجردة والبيانات الدلالية حول ربط الاسم ومعلومات الكتابة.
بالنسبة للغات المفسرة، يعمل المستخرج مباشرة على التعليمة البرمجية المصدر، ما يحل التبعيات لإعطاء تمثيل دقيق لقاعدة التعليمة البرمجية.
هناك مستخرج واحد لكل لغة يدعمها CodeQL لضمان دقة عملية الاستخراج قدر الإمكان. بالنسبة إلى قواعد البيانات متعددة اللغات، يتم إنشاء قواعد البيانات بلغة واحدة في كل مرة.
بعد الاستخراج، يتم استيراد جميع البيانات المطلوبة للتحليل (البيانات الارتباطية وملفات المصدر المنسخة ومخطط قاعدة بيانات خاصة باللغة يحدد العلاقات المتبادلة في البيانات) إلى دليل واحد، يعرف باسم قاعدة بيانات CodeQL.
تنفيذ الاستعلام
بعد إنشاء قاعدة بيانات CodeQL، يتم تنفيذ استعلام واحد أو أكثر عليها. تتم كتابة استعلامات CodeQL بلغة استعلام عنصرية المنحى مصممة خصوصاً تسمى QL.
يمكنك تشغيل الاستعلامات المسحوبة من مستودع CodeQL (أو الاستعلامات المخصصة التي كتبتها بنفسك) باستخدام ملحق CodeQL ل VS Code أو CodeQL CLI.
نتائج الاستعلام
تحول الخطوة الأخيرة النتائج التي تم إنتاجها أثناء تنفيذ الاستعلام إلى نموذج أكثر معنى في سياق التعليمات البرمجية المصدر، ما يعني أن النتائج يتم تفسيرها بطريقة تبرز المشكلة المحتملة التي تم تصميم الاستعلامات للعثور عليها.
تحتوي الاستعلامات على خصائص بيانات التعريف التي تشير إلى كيفية تفسير النتائج. على سبيل المثال، تعرض بعض الاستعلامات رسالة بسيطة في مكان واحد في التعليمة البرمجية. يعرض البعض الآخر سلسلة من المواقع التي تمثل خطوات على طول مسار تدفق البيانات أو التحكم في التدفق، إلى جانب رسالة تشرح أهمية النتيجة. لا يتم تفسير الاستعلامات التي لا تحتوي على بيانات تعريف؛ تكون نتائجها ناتجة كجدول ولا يتم عرضها في التعليمات البرمجية المصدر.
بعد التفسير، يتم إخراج النتائج لمراجعة التعليمة البرمجية والفرز. في CodeQL for Visual Studio Code، يتم عرض نتائج الاستعلام المفسرة تلقائياً في التعليمة البرمجية المصدر. يمكنك إخراج النتائج التي تم إنشاؤها بواسطة CodeQL CLI في عدد من التنسيقات المختلفة للاستخدام مع أدوات مختلفة.