首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第三方网站如何生成构建/代码覆盖徽章?

第三方网站如何生成构建/代码覆盖徽章?
EN

Stack Overflow用户
提问于 2020-01-23 15:26:52
回答 1查看 1.6K关注 0票数 4

我的工作设置包括一个公司托管的和Azure管道。有了shields.io这样的站点,我就可以为构建成功或代码覆盖率生成徽章,而无需使用DevOps进行身份验证。该徽章然后托管在shields.io上,这意味着这个第三方站点必须以某种方式访问我的构建过程。它们看起来是这样的:

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

  1. 即使管道和一切都是私有的,构建成功的状态也是为整个网络公开托管的。这是故意的,因为它并不真正被认为是一种安全风险。如果知道我的内部项目的Organization/ProjectName/DefinitionID,就不能做任何其他事情。
  2. 这种情况不应该发生,而且某些东西配置错误。我的设置中可能有漏洞。
  3. 有某种形式的身份验证,我不知道,例如,我只能看到只要我的浏览器登录到Azure (不太可能,它似乎也在私人模式下起作用)

我在网上或堆叠溢出上找不到关于这个的任何东西。我很高兴有任何资源来解释这一点,因为我不确定我是否能够安全地使用它们。使用shields.io会带来安全风险吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 15:40:48

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

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

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

该处有两种方式来实现这一目标:

  • 使用shields.io作为服务,向JSON端点发送包含如何生成映像的信息的JSON
  • 使用shields.io作为库或任何自定义方法在内部实现映像生成。

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

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

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

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

但如果你看看徽章上的东西,比如工作服或特拉维斯,你就会发现它们有自己的徽章:

  • <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-徽章安装在

代码语言:javascript
复制
npm i gh-badges --save

你就是这样用的:

代码语言:javascript
复制
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的数据。

您可以在控制器上下文这里这里中看到完整的示例。

关于它的风险,主要考虑的是这里实际暴露的数据。几乎什么都没有。如果您担心数据隐私,您只需自己生成徽章并为它们提供服务,或者根据您的意愿将它们嵌入;-)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59881949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档