Как значки покрытия сборки / кода генерируются сторонними сайтами? - PullRequest
1 голос
/ 23 января 2020

Моя рабочая настройка включает в себя корпоративный Github Enterprise Server и Azure Devops конвейеры. На таких сайтах, как shields.io , я могу создавать значки для успешной сборки или покрытия кода, по-видимому, даже не аутентифицируясь в DevOps. Затем значок размещается на shields.io, что означает, что этот сторонний сайт должен каким-то образом иметь доступ к моему процессу сборки. Они выглядят так:

enter image description here

Поскольку github и все конвейеры сборки, очевидно, являются внутренними для компании, я вижу три варианта, как это может работать:

  1. Несмотря на то, что конвейеры и все являются частными, статус успешного построения хранится открыто для всей сети. Это сделано специально, так как это не считается угрозой безопасности. Ничего другого нельзя сделать, зная имя организации / ProjectName / DefinitionID моего внутреннего проекта.

  2. Этого не должно быть, и что-то настроено неправильно. У меня может быть уязвимость в моей настройке.

  3. Существует некоторая форма аутентификации, о которой я не знаю, например, я могу видеть значок, пока мой браузер зарегистрирован в Azure (маловероятно, что, похоже, он работает и в приватном режиме)

Я не могу найти что-либо в Интернете или в стеке потока по этому поводу. Я был бы рад любым ресурсам, объясняющим это, так как я не уверен, смогу ли я использовать их безопасно. Является ли использование shields.io угрозой безопасности?

1 Ответ

6 голосов
/ 23 января 2020

Значки, как вы упомянули, обычно представляют собой пустые изображения SVG без информации (вы можете взглянуть на шаблоны здесь ).

Итак, для службы по созданию SVG ( или PNG):

  • служба получает данные обновления от вас через какую-либо систему CI
  • Служба создает соответствующее изображение (SVG или PNG), которое прикреплено к определенная GET конечная точка

Служба может реализовать это двумя способами:

  • Использовать shields.io в качестве службы, отправив JSON с информацией о как сгенерировать изображение для их JSON конечной точки
  • Реализовать генерацию изображения внутри, используя shields.io в качестве библиотеки или любым другим способом.

Так или иначе, приложения SaaS, имеющие значки, обычно обслуживают их сами (даже если внутренне они вызывают shields.io). Это означает, что каждая служба может самостоятельно реализовать любые меры безопасности.

Данные, которые передаются в shields.io, обычно содержат два слова и несколько цветов. Таким образом, для создания значков раскрывается не так много информации (см. Пример ниже). Кроме того, связь между сервисом и shields.io шифруется и отправляется по HTTPS.

Что касается конфиденциальности, одним из примеров является то, что крупные компании обычно размещают решения, которые доступны только для внутреннего использования, поэтому значки доступны также только для внутреннего использования.

Значки, конкретно включенные в ваш вопрос, содержат только опубликовать c данные из магазинов приложений или звезд для проекта GitHub et c. который обычно публикуется c, пока сам проект публикуется c. Эти значки часто используют API shields.io для их автоматического создания с использованием данных publi c.

Но если вы посмотрите на значки для таких вещей, как Coveralls или Travis, вы увидите, что они размещают свои собственные значки:

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

    image

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

    image

Вот небольшой пример машинописного текста о том, как создать значок с помощью shields.io в качестве библиотеки и обслуживать его:

Сначала установите gh-badges с

npm i gh-badges --save

и вот как вы его используете:

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);
})();

Это в основном те же данные, которые отправляются на shields.io как сервис конечная точка, упомянутая выше.

Вы можете увидеть полный пример в контексте контроллера здесь и здесь .

О риске этого В основном думают о том, какие данные на самом деле выставлены здесь. Это почти ничего. и если вы беспокоитесь о конфиденциальности данных, вы можете просто создать значки и самим их обслуживать или встраивать их как угодно конфиденциально; -)

...