4

我的工作设置包括公司托管的 Github Enterprise Server 和 Azure Devops 管道。借助shields.io 之类的网站,我可以生成构建成功或代码覆盖率的徽章,似乎从未使用 DevOps 对自己进行身份验证。然后徽章托管在 shields.io 上,这意味着这个第 3 方网站必须以某种方式访问​​我的构建过程。它们看起来像这样:

在此处输入图像描述

由于 github 以及所有构建管道显然都是公司内部的,我可以看到三个选项如何工作:

  1. 尽管管道和一切都是私有的,但构建成功状态是为整个网络公开托管的。这是设计使然,因为它并不真正被视为安全风险。知道我的内部项目的组织/项目名称/定义 ID 就无法做任何其他事情。

  2. 这不应该发生,并且配置错误。我的设置中可能存在漏洞。

  3. 有某种形式的身份验证正在进行,我不知道,例如,只要我的浏览器登录到 Azure,我就只能看到徽章(不太可能,它似乎也可以在私有模式下工作)

我在网上或 stackoverflow 上找不到任何关于此的内容。我会很高兴看到任何解释这一点的资源,因为我不确定我是否可以安全地使用它们。使用 shields.io 是否存在安全风险?

4

1 回答 1

7

您提到的徽章通常只是没有信息的空白 SVG 图像(您可以在此处查看模板)。

因此,对于创建 SVG(或 PNG)的服务:

  • 该服务通过某种 CI 系统从您那里获取更新数据
  • 该服务生成附加到某个GET端点的相应图像(SVG 或 PNG)

该服务有两种方法来实现这一点:

因此,无论哪种方式,拥有徽章的 SaaS 应用程序通常都会为它们自己服务(即使它们在内部调用 shields.io)。这意味着每个服务都可以自己实施任何安全措施。

传递给 shields.io 的数据通常包括两个单词和一些颜色。因此,不会为了生成徽章而暴露太多信息(参见下面的示例)。此外,服务和 shields.io 之间的通信是加密的并通过 HTTPS 发送。

对于隐私,一个例子是大公司通常拥有只能在内部访问的托管解决方案,因此徽章也只能在内部访问。

您的问题中特别包含的徽章仅包含来自应用商店或 GitHub 项目的明星等的公共数据,只要项目本身是公开的,这些数据通常是公开的。这些徽章经常使用 shields.io API 使用公共数据自动生成它们。

但是,如果您查看像 Coveralls 或 Travis 这样的徽章,您会看到他们拥有自己的徽章:

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

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

这是一个关于如何使用 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 的数据基本相同。

您可以在此处此处查看控制器上下文中的完整示例。

关于它的风险,主要是考虑这里实际暴露了哪些数据。这几乎没有。如果您担心数据隐私,您可以自己生成徽章并提供服务或根据需要私下嵌入它们;-)

于 2020-01-23T15:40:48.390 回答