3rd 方站点如何生成构建/代码覆盖率徽章?
How are build / code coverage badges generated by 3rd-party sites?
我的工作设置包括公司托管的 Github 企业服务器和 Azure Devops 管道。通过像 shields.io 这样的网站,我可以生成构建成功或代码覆盖率的徽章,似乎无需通过 DevOps 验证自己。徽章然后托管在 shields.io 上,这意味着这个第 3 方站点必须以某种方式访问我的构建过程。它们看起来像这样:
由于 github 以及所有构建管道显然都是公司内部的,我可以看到三个选项如何工作:
即使管道和所有内容都是私有的,构建成功状态也会在整个网络上公开托管。这是设计使然,因为它实际上并未被视为安全风险。了解我的内部项目的 Organization/ProjectName/DefinitionID 无能为力。
这不应该发生,有些配置错误。我的设置中可能存在漏洞。
正在进行某种我不知道的身份验证形式,例如只要我的浏览器登录到 Azure,我就只能看到徽章(不太可能,它似乎也可以在私人模式下工作)
我在网上或 Whosebug 上找不到与此相关的任何信息。如果有任何资源对此进行解释,我会很高兴,因为我不确定我是否可以安全地使用它们。使用 shields.io 是否存在安全风险?
像你提到的徽章通常只是没有信息的空白 SVG 图片(你可以看看templates here)。
因此,对于创建 SVG(或 PNG)的服务:
- 服务通过某种CI系统
从您那里获取更新数据
- 该服务生成附加到特定
GET
端点的相应图像(SVG 或 PNG)
服务有两种实现方式:
- 使用 shields.io 作为一项服务,向他们的 JSON endpoint
发送包含如何生成图像的信息的 JSON
- 使用 shields.io 作为库或通过任何自定义方式在内部实现图像生成。
因此,无论哪种方式,具有徽章的 SaaS 应用程序通常会自行为它们提供服务(即使它们在内部调用 shields.io)。这意味着每项服务都可以自行实施任何安全措施。
传递给shields.io的数据通常包括两个词和一些颜色。因此,不会为了生成徽章而暴露太多信息(请参见下面的示例)。此外,服务与 shields.io 之间的通信已加密并通过 HTTPS 发送。
为了隐私,一个例子是大公司通常拥有只能在内部访问的托管解决方案,因此徽章也只能在内部访问。
您的问题中特别包含的徽章仅包含 public 来自应用程序商店或 GitHub 项目等的明星数据,通常 public 只要项目本身是public。这些徽章经常使用 shields.io API 使用 public 数据自动生成它们。
但是如果您查看 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 的数据基本相同。
您可以在控制器上下文中查看完整示例 here and here。
关于它的风险,多想想这里到底暴露了什么数据。几乎什么都没有。如果您担心数据隐私,您可以自己生成徽章并提供给它们,或者根据需要将它们私密地嵌入 ;-)
我的工作设置包括公司托管的 Github 企业服务器和 Azure Devops 管道。通过像 shields.io 这样的网站,我可以生成构建成功或代码覆盖率的徽章,似乎无需通过 DevOps 验证自己。徽章然后托管在 shields.io 上,这意味着这个第 3 方站点必须以某种方式访问我的构建过程。它们看起来像这样:
由于 github 以及所有构建管道显然都是公司内部的,我可以看到三个选项如何工作:
即使管道和所有内容都是私有的,构建成功状态也会在整个网络上公开托管。这是设计使然,因为它实际上并未被视为安全风险。了解我的内部项目的 Organization/ProjectName/DefinitionID 无能为力。
这不应该发生,有些配置错误。我的设置中可能存在漏洞。
正在进行某种我不知道的身份验证形式,例如只要我的浏览器登录到 Azure,我就只能看到徽章(不太可能,它似乎也可以在私人模式下工作)
我在网上或 Whosebug 上找不到与此相关的任何信息。如果有任何资源对此进行解释,我会很高兴,因为我不确定我是否可以安全地使用它们。使用 shields.io 是否存在安全风险?
像你提到的徽章通常只是没有信息的空白 SVG 图片(你可以看看templates here)。
因此,对于创建 SVG(或 PNG)的服务:
- 服务通过某种CI系统 从您那里获取更新数据
- 该服务生成附加到特定
GET
端点的相应图像(SVG 或 PNG)
服务有两种实现方式:
- 使用 shields.io 作为一项服务,向他们的 JSON endpoint 发送包含如何生成图像的信息的 JSON
- 使用 shields.io 作为库或通过任何自定义方式在内部实现图像生成。
因此,无论哪种方式,具有徽章的 SaaS 应用程序通常会自行为它们提供服务(即使它们在内部调用 shields.io)。这意味着每项服务都可以自行实施任何安全措施。
传递给shields.io的数据通常包括两个词和一些颜色。因此,不会为了生成徽章而暴露太多信息(请参见下面的示例)。此外,服务与 shields.io 之间的通信已加密并通过 HTTPS 发送。
为了隐私,一个例子是大公司通常拥有只能在内部访问的托管解决方案,因此徽章也只能在内部访问。
您的问题中特别包含的徽章仅包含 public 来自应用程序商店或 GitHub 项目等的明星数据,通常 public 只要项目本身是public。这些徽章经常使用 shields.io API 使用 public 数据自动生成它们。
但是如果您查看 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 的数据基本相同。
您可以在控制器上下文中查看完整示例 here and here。
关于它的风险,多想想这里到底暴露了什么数据。几乎什么都没有。如果您担心数据隐私,您可以自己生成徽章并提供给它们,或者根据需要将它们私密地嵌入 ;-)