Tirer le meilleur parti de snyk test avec JSON
Tim Kadlec
29 juin 2017
0 minutes de lectureLa commande snyk test analyse les dépendances de votre application pour détecter d’éventuelles vulnérabilités connues. Si elle en découvre, la commande renvoie une erreur et affiche dans la console des informations sur les vulnérabilités ainsi que sur la manière d’y remédier.
Elle fonctionne très bien dans un environnement CI et fournit de nombreuses informations exploitables. Mais vous souhaiterez parfois aller plus loin : manipuler les résultats des tests ou créer un rapport local facile à partager. C’est là qu’intervient l’option --json, qui exporte les résultats de snyk test au format JSON.
Nous allons vous présenter quelques possibilités offertes par snyk test --json, ainsi que quelques outils gratuits.
L’option JSON
La commande snyk test --json renvoie un objet JSON contenant des informations utiles sur votre projet. Voici le format de base de cet objet :
De plus, vulnerabilities contient des informations détaillées sur chaque vulnérabilité détectée :
Toutes ces informations vous offrent de nombreuses possibilités pour personnaliser les résultats de Snyk test.
Trier les vulnérabilités selon vos critères
Par défaut, snyk test signale les vulnérabilités dans l’ordre où elles sont détectées dans l’arbre de dépendances généré.
Il existe plusieurs outils pour traiter et réorganiser les résultats, mais nous utiliserons jq. jq est un processeur JSON en ligne de commande. Il vous permet de transmettre des données JSON par un pipe, de les filtrer, puis de renvoyer les données obtenues.
Avec jq, vous pouvez trier les résultats comme vous le souhaitez. Par exemple, vous pouvez trier les vulnérabilités par date de publication afin d’afficher les plus récentes en premier.
En ajoutant quelques lignes, vous pouvez aussi trier les vulnérabilités par niveau de gravité, afin d’afficher les plus critiques en premier.
Personnaliser la gravité des vulnérabilités
Vous pouvez également utiliser jq pour modifier le niveau de gravité d’une vulnérabilité si, pour une raison ou une autre, vous estimez qu’il devrait différer de celui indiqué par Snyk.
Par exemple, votre site utilise peut-être une version de Nokogiri qui présente une vulnérabilité d’exécution de code arbitraire de gravité élevée, mais votre équipe a conclu que l’utilisation de Nokogiri rend le problème moins grave. Vous pouvez alors utiliser jq pour modifier le niveau de gravité de la vulnérabilité dans vos rapports.
Générer un rapport HTML local
Le tableau de bord en ligne de votre projet détaille chaque vulnérabilité : son niveau de gravité, une description, les chemins vulnérables et bien plus encore. Pour obtenir une copie locale à partir des résultats de snyk test, vous pouvez utiliser notre outil open source Snyk JSON to HTML Mapper.
L’outil accepte les résultats de snyk test --json et génère un rapport HTML local, sans ressources externes. Pour l’utiliser, installez-le globalement avec npm install -g snyk-to-html. Ensuite, lorsque vous exécutez la commande test, vous pouvez transmettre directement les résultats au module, comme ceci :
La commande ci-dessus crée un rapport local à la mise en page soignée, sans dépendances externes.

Si vous personnalisez la sortie JSON avec jq, vous pouvez également transmettre les résultats modifiés. Par exemple, la commande suivante génère un rapport HTML local dans lequel les vulnérabilités sont triées par date de publication.
Créer des rapports JSON sur mesure
La commande snyk test fournit déjà de nombreuses informations utiles. Si vous avez besoin de plus de flexibilité, snyk test --json répond à vos besoins. Avec quelques outils gratuits et un peu de créativité, vous pouvez adapter les résultats Snyk à vos besoins spécifiques.
Si vous utilisez la sortie JSON pour créer des rapports personnalisés ou ajouter des fonctionnalités, dites-le-nous. Nous serions ravis de découvrir ce que vous avez imaginé !
Lancez-vous dans les challenges Capture The Flag
Apprenez à résoudre des challenges Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.