4 votes

Comment les badges de couverture de la construction / du code sont-ils générés par des sites tiers ?

Ma configuration de travail comprend un serveur d'entreprise Github hébergé par l'entreprise et des pipelines Azure Devops. Avec des sites comme shields.io Je peux générer des badges pour le succès de la construction ou la couverture du code, apparemment sans jamais m'authentifier auprès de DevOps. Le badge est ensuite hébergé sur shields.io, ce qui signifie que ce site tiers doit d'une manière ou d'une autre avoir accès à mon processus de construction. Ils ressemblent à ceci :

enter image description here

Puisque le github ainsi que tous les pipelines de construction sont évidemment internes à l'entreprise, je vois trois options pour que cela fonctionne :

  1. Même si les pipelines et tout ce qui s'y rapporte sont privés, l'état de réussite de la construction est hébergé ouvertement pour tout le web. C'est un choix délibéré, car cela n'est pas vraiment considéré comme un risque pour la sécurité. Rien d'autre ne peut être fait en connaissant l'organisation/le nom du projet/l'identifiant de définition de mon projet interne.

  2. Cela ne devrait pas se produire et quelque chose est mal configuré. Il se peut qu'il y ait une vulnérabilité dans mon installation.

  3. Il y a une forme d'authentification que je ne connais pas, par exemple je ne peux voir le badge que si mon navigateur est connecté à Azure (peu probable, cela semble fonctionner aussi en mode privé).

Je ne trouve rien sur le web ou sur stackoverflow à ce sujet. Je serais heureux d'avoir des ressources expliquant cela car je ne suis pas sûr de pouvoir les utiliser en toute sécurité. L'utilisation de shields.io présente-t-elle un risque pour la sécurité ?

7voto

Thatkookooguy Points 733

Les badges que vous avez mentionnés sont généralement des images SVG vierges sans les informations (vous pouvez jeter un coup d'œil à la section modèles ici ).

Donc, pour un service de création de SVG (ou PNG) :

  • le service reçoit les données de mise à jour de votre part par l'intermédiaire d'un système de CI quelconque
  • Le service génère une image correspondante (SVG ou PNG) qui est attachée à une certaine GET point final

Le Service dispose de deux moyens pour mettre cela en œuvre :

  • Utiliser shields.io comme un service, en envoyant un JSON avec les informations sur la façon de générer l'image à leur site web. Point de terminaison JSON
  • Implémenter la génération d'images en interne en utilisant shields.io comme bibliothèque ou par tout autre moyen personnalisé.

Quoi qu'il en soit, les applications SaaS qui ont des badges les servent généralement elles-mêmes (même si elles appellent shields.io en interne). Cela signifie que chaque service peut mettre en œuvre les mesures de sécurité qu'il souhaite.

Les données transmises à shields.io comprennent généralement deux mots et quelques couleurs. Il n'y a donc pas trop d'informations exposées pour générer les badges (voir l'exemple ci-dessous). De plus, la communication entre le service et shields.io est cryptée et envoyée via HTTPS.

En ce qui concerne la protection de la vie privée, les grandes entreprises disposent généralement de solutions hébergées qui ne sont accessibles qu'en interne, de sorte que les badges ne sont accessibles qu'en interne également.

Les badges mentionnés dans votre question ne contiennent que des données publiques provenant de magasins d'applications ou d'étoiles pour un projet GitHub, etc. qui sont généralement publiques tant que le projet lui-même est public. Ces badges utilisent très souvent l'API shields.io pour les générer automatiquement en utilisant les données publiques.

Mais si vous regardez les badges pour des choses comme Coveralls ou Travis, vous verrez qu'ils ont leurs propres badges :

  • <img src="https://travis-ci.org/Kibibit/achievibit.svg?branch=master">

  • <img src="https://coveralls.io/repos/github/Kibibit/achievibit/badge.svg?branch=master">

Voici un petit exemple de typecript sur la façon de créer un badge en utilisant la bibliothèque shields.io et de le servir :

Installez d'abord badges gh avec

npm i gh-badges --save

et voici comment l'utiliser :

import { BadgeFactory } from 'gh-badges';

(async () => {
  const bf = new BadgeFactory();

  const format = {
    format: 'svg',
    text: [ 'coverage', '90%' ],
    labelColor: '#894597',
    color: '#5d5d5d',
    template: 'for-the-badge',
    logo: [
      'data:image/png;base64,iVBORw0KGgoAAAA',
      'NSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJL',
      'R0QA/wD/AP+gvaeTAAAA/0lEQVRYhe3WMU7DM',
      'BjFcadqh0qdWWBl7QU4Ss/AjsREF8RdOhYO0E',
      'qoN2DhFIgBOvBjIIMVxSFyUiEhP8lD7C/v/T9',
      '7sEMoKkoIe+Npn8qpOgCM2VBVVa1ZkzFDcjQd',
      'apDqLIR+u/jnO1AACkABKABdAO9DjHEWfb7lA',
      'LwOAQghXPXx6gJ4zE3GJIRwE0095Zhc4PO3iz',
      '7x7zoq+cB5bifr9tg0AK7xFZXcZYXXZjNs+wB',
      'giofG8hazbIDaeI5dFwAu8dxY2mE+KDyCWGCT',
      'YLj3c86xNliMEh5BVLjFseNEjnVN8pU0BsgSh',
      '5bwA5YnC25AVFjhpR6rk3Zd9K/1Dcae2pUn6m',
      'qiAAAAAElFTkSuQmCC'
    ].join('')
  };

  return bf.create(format);
})();

Il s'agit essentiellement des mêmes données que celles envoyées au service shields.io mentionné ci-dessus.

Vous pouvez voir l'exemple complet dans le contexte d'un contrôleur aquí y aquí .

En ce qui concerne les risques, il faut surtout penser aux données qui sont réellement exposées ici. Et si vous vous inquiétez de la confidentialité des données, vous pouvez simplement générer les badges vous-mêmes et les diffuser ou les intégrer de manière aussi privée que vous le souhaitez ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X