مرحبًا بك في التعليمات البرمجية للمسح التعليمي Java! سوف يأخذك هذا البرنامج التعليمي من خلال إعداد GitHub Advanced Security: مسح الكود بالإضافة إلى تفسير النتائج التي قد يجدها. يحتوي المستودع التالي على ضعف حقن SQL لغرض العرض التوضيحي.
يعد مسح الكود ميزة تستخدمها لتحليل الكود في مستودع GitHub للعثور على نقاط الضعف الأمان وأخطاء الترميز. يتم عرض أي مشاكل تم تحديدها بواسطة التحليل في Github.
يمكنك استخدام Code Scanning باستخدام CodeQL ، محرك تحليل التعليمات البرمجية الدلالية. يعامل CodeQL الكود كبيانات ، مما يتيح لك إيجاد نقاط الضعف المحتملة في الكود الخاص بك بثقة أكبر من المحللات الثابتة التقليدية.
هذا البرنامج التعليمي مع تحليل CODEQL مع مسح الكود من أجل البحث عن الثغرات داخل الكود الخاص بك.
ابدأ بإنشاء مستودع جديد من شوكة (عامة) أو استنساخ المستودع.

عند إنشاء مستودع متشعب ، تأكد من ذلك
انقر فوق علامة التبويب Security .

انقر فوق Set up code scanning .

انقر فوق Setup this workflow بواسطة تحليل CodeQL.

سيؤدي ذلك إلى إنشاء ملف سير العمل GitHub Actions مع إعداد CODEQL بالفعل. نظرًا لأن Java هي لغة مجمعة ، فستحتاج إلى إعداد البناء في خطوات لاحقة. راجع الوثائق إذا كنت ترغب في تكوين تحليل CodeQL مع نظام CI من الطرف الثالث بدلاً من استخدام إجراءات GitHub.
يحتوي ملف سير عمل الإجراءات على عدد من الأقسام المختلفة بما في ذلك:

انقر فوق Start Commit -> Commit this file لارتكاب التغييرات في الفرع الرئيسي .
هناك عدد من الأحداث التي يمكن أن تؤدي إلى سير عمل إجراءات GitHub. في هذا المثال ، سيتم تشغيل سير العمل

إن إعداد سير عمل CODEQL الجديد وارتكابه للفرع الرئيسي في الخطوة أعلاه سيؤدي إلى تشغيل الفحص.
انقر فوق علامة تبويب Actions -> CodeQL
انقر فوق تشغيل سير العمل المحدد. يمكنك عرض تقدم سير العمل حتى يكتمل التحليل.

بمجرد الانتهاء من سير العمل ، انقر فوق علامة تبويب Security -> Code Scanning Alerts . يجب أن يكون تنبيه الأمان "استعلام تم تصميمه من مصادر يسيطر عليها المستخدم" مرئيًا.
سيوفر النقر على تنبيه الأمان تفاصيل حول تنبيه الأمان بما في ذلك:

انقر فوق Show more لعرض نزول كامل للتنبيه بما في ذلك الأمثلة والروابط لمعلومات إضافية.


يمكن أن يكون تحليل CODEQL قادرًا على تتبع مسار تدفق البيانات من المصدر إلى الغرق ويمنحك القدرة على عرض اجتياز المسار داخل التنبيه.
انقر فوق show paths من أجل رؤية مسار تدفق البيانات الذي أدى إلى هذا التنبيه.


من أجل إصلاح هذا التنبيه المحدد ، سنحتاج إلى ضمان صحة المعلمات المستخدمة في استعلام SQL وتطهيرها.
انقر فوق علامة التبويب Code وقم بتحرير ملف IndexController.java في مجلد Controllers ، واستبدل المحتوى بـ File fixme .

انقر فوق Create a new branch for this commit and start a pull request ، وتسمية Branch fix-sql-injection ، وقم بإنشاء طلب السحب.
في طلب السحب ، ستلاحظ أن تحليل CODEQL قد بدأ كتحقق من الحالة. انتظر حتى يكمل.

بعد الانتهاء من سير العمل ، انقر فوق Details عن طريق Code Scanning Results / CodeQL Check.

لاحظ أن مسح الكود قد اكتشف أن طلب السحب هذا سيصلح ثغرة أمنية حقن SQL التي تم اكتشافها من قبل.

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

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

الآن وبعد أن تم إعداد تحليل CodeQL ونصلح تنبيه أمان ، يمكننا محاولة إدخال تنبيه في طلب سحب.
قم بإنشاء طلب سحب جديد مع الفرع الأساسي كفرعك main وفرع المقارنة كفرع new-feature .

تأكد من ضبط الفرع الأساسي على الفرع main لمستودعاتك مقابل الفرع main للمستودع الأصلي.
بمجرد إنشاء طلب السحب ، ستلاحظ أن تحليل CodeQL قد بدأ كتحقق من الحالة. انتظر حتى يكمل.
بعد الانتهاء من سير العمل ، ستفشل التحقق Code Scanning Results / CodeQL . لاحظ أن مسح الكود قد اكتشف أن طلب السحب هذا يقدم تنبيهًا جديدًا للأمان.

مباشرة في طلب السحب ، ستلاحظ أن Bot Github Code Scanning قد ترك مراجعة لطلب السحب مع تفاصيل تنبيه الأمان. سيساعد ذلك المطورين على تحديد المشكلات الأمنية التي تم تقديمها بسرعة في طلباتهم السحب.

يسمح هذا أيضًا بالتعاون بين المطورين وفرق الأمن لمناقشة تنبيه الأمن وكيفية علاجه.

انقر فوق Show more details من خلال Code Scanning Alert الجديد للقفز إلى علامة التبويب Security وعرض تفاصيل تنبيه الأمان.

لاحظ أنه تم العثور على تنبيه الأمن In pull request وليس في الفرع main (الإنتاج).
هل أنت مستعد للتحدث عن ميزات الأمان المتقدمة لـ GitHub Enterprise؟ اتصل بالمبيعات لمزيد من المعلومات!
تحقق من صفحة ميزة GitHub الخاصة بميزات الأمان لمزيد من ميزات الأمان المضمنة في GitHub.
تحقق من وثائق مسح الكود للحصول على خيارات التكوين الإضافية والتفاصيل الفنية.