Bienvenue dans le didacticiel Java à numérisation du code! Ce tutoriel vous guidera sur la façon de configurer GitHub Advanced Security: Code Scanning ainsi que interpréter les résultats qu'il peut trouver. Le référentiel suivant contient une vulnérabilité d'injection SQL à des fins de démonstration.
La numérisation de code est une fonctionnalité que vous utilisez pour analyser le code dans un référentiel GitHub pour trouver des vulnérabilités de sécurité et des erreurs de codage. Tout problème identifié par l'analyse est présenté dans GitHub.
Vous pouvez utiliser la numérisation de code avec CodeQL, un moteur d'analyse de code sémantique. CodeQL traite le code comme des données, vous permettant de trouver des vulnérabilités potentielles dans votre code avec une plus grande confiance que les analyseurs statiques traditionnels.
Ce didacticiel avec une analyse CodeQL d'utilisation avec numérisation de code afin de rechercher des vulnérabilités dans votre code.
Commencez par créer un nouveau référentiel à partir d'une fourche (public) ou en clonage le référentiel.

Lors de la création du référentiel fourchu, assurez-vous de
Cliquez sur l'onglet Security .

Cliquez sur Set up code scanning .

Cliquez sur le bouton Setup this workflow par analyse CodeQL.

Cela créera un fichier de workflow GitHub Actions avec CodeQL déjà configuré. Étant donné que Java est une langue compilée, vous devrez configurer la construction en étapes ultérieures. Voir la documentation si vous souhaitez configurer l'analyse CodeQL avec un système CI tiers au lieu d'utiliser des actions GitHub.
Le fichier de workflow Actions contient un certain nombre de sections différentes, notamment:

Cliquez sur Start Commit -> Commit this file pour commettre les modifications à la branche principale .
Il existe un certain nombre d'événements qui peuvent déclencher un workflow GitHub Actions. Dans cet exemple, le flux de travail sera déclenché sur

La configuration du nouveau flux de travail CodeQL et l'engagement à la branche principale dans l'étape ci-dessus déclenchera le scan.
Cliquez sur l'onglet Actions -> CodeQL
Cliquez sur l'exécution de workflow spécifique. Vous pouvez voir les progrès du flux de travail exécuté jusqu'à la fin de l'analyse.

Une fois le workflow terminé, cliquez sur l'onglet Security -> Code Scanning Alerts . Une alerte de sécurité «requête construite à partir de sources contrôlées par l'utilisateur» doit être visible.
Cliquer sur l'alerte de sécurité fournira des détails sur l'alerte de sécurité, notamment:

Cliquez sur Show more pour afficher une desciction complète de l'alerte, y compris des exemples et des liens vers des informations supplémentaires.


L'analyse CodeQL est capable de tracer le chemin de flux de données de la source à l'énigme et vous donne la possibilité de visualiser la traversée de chemin dans l'alerte.
Cliquez sur show paths afin de voir le chemin de données de données qui a abouti à cette alerte.


Afin de réparer cette alerte spécifique, nous devrons nous assurer que les paramètres utilisés dans la requête SQL sont validés et désinfectés.
Cliquez sur l'onglet Code et modifiez le fichier IndexController.java dans le dossier Controllers , remplacez le contenu par le fichier fixme .

Cliquez sur Create a new branch for this commit and start a pull request , nommez la branche fix-sql-injection et créez la demande de traction.
Dans la demande de traction, vous remarquerez que l'analyse CodeQL a commencé comme une vérification d'état. Attendez jusqu'à ce qu'il se termine.

Une fois le workflow terminé, cliquez sur Details par les Code Scanning Results / CodeQL .

Notez que la numérisation du code a détecté que cette demande de traction corrigera la vulnérabilité d'injection SQL détectée auparavant.

Fusionner la demande de traction. Une fois la demande de traction fusionnée, un autre workflow démarrera pour scanner le référentiel pour toute vulnérabiltie.
Une fois le workflow final terminé, accédez à l'onglet Security et cliquez sur Closed . Notez que la requête construite à partir d'alerte de sécurité des sources contrôlées par l'utilisateur apparaît désormais comme un problème fermé.

Cliquez sur l'alerte de sécurité et remarquez qu'il détaille lorsque le correctif a été effectué, par qui, et le commit spécifique. Cela fournit une traçabilité complète pour détailler quand et comment une alerte de sécurité a été fixée et exactement ce qui a été modifié pour résoudre le problème.

Maintenant que nous avons configuré l'analyse CodeQL et avoir corrigé une alerte de sécurité, nous pouvons essayer d'introduire une alerte dans une demande de traction.
Créez une nouvelle demande de traction avec la branche de base en tant que branche main et la succursale de comparaison en tant que succursale new-feature .

Assurez-vous que la branche de base est définie sur votre propre branche main des référentiels par rapport à la branche main du référentiel d'origine.
Une fois la demande de traction créée, vous remarquerez que l'analyse CodeQL a commencé comme une vérification d'état. Attendez jusqu'à ce qu'il se termine.
Une fois le workflow terminé, la vérification de l'état Code Scanning Results / CodeQL aura échoué. Remarquez que la numérisation de code a détecté que cette demande de traction introduit une nouvelle alerte de sécurité.

Directement dans la demande de traction, vous remarquerez que le bot de numérisation du code GitHub a laissé un examen de la demande de traction avec les détails de l'alerte de sécurité. Cela aidera les développeurs à identifier rapidement les problèmes de sécurité introduits dans leurs demandes de traction.

Cela permet également à la collaboration entre les développeurs et les équipes de sécurité de discuter de l'alerte de sécurité et de la façon de le remédier.

Cliquez sur Show more details par la nouvelle Code Scanning Alert pour sauter dans l'onglet Security et afficher les détails de l'alerte de sécurité.

Notez que l'alerte de sécurité a été trouvée In pull request et non dans la branche main (production).
Prêt à parler des fonctionnalités de sécurité avancées pour GitHub Enterprise? Contactez les ventes pour plus d'informations!
Consultez la page des fonctionnalités de sécurité de GitHub pour plus de fonctionnalités de sécurité intégrées dans GitHub.
Consultez la documentation de numérisation de code pour des options de configuration supplémentaires et des détails techniques.