杜绝开源依赖风险,许可证扫描让高效合规「两不误」

news2024/9/28 11:21:38

目录

开源许可证及其常见类型

开源许可证扫描是软件研发过程中,不可或缺的工具

极狐GitLab 开源许可证扫描的优势与应用

Step 1:启用及设置许可证策略

Step 2:自动创建策略文件存放项目

Step 3:查看许可证合规情况

Step 4:查看 MR 审批结果

YAML 、license-finder、报告文件解析

YAML

变量

license_scanning

license-finder

报告文件


🌟 近日,在「DevSecOps 软件安全开发实践」课程上,极狐(GitLab) 专业服务交付经理居文峰、极狐(GitLab) 前端工程师万里欣,分享了许可证扫描的原理、配置及应用,并演示了极狐GitLab 许可证扫描功能,帮助大家安全使用开源软件。

以下内容整理自本次直播,Enjoy~

应用开源软件已经成为软件行业的重大趋势。开源软件为企业和开发者提供了巨大便利,促进了创新与协作。但如果忽视开源软件许可证及其权利义务与限制,很可能会面临法律纠纷、安全隐患以及高昂的依赖管理成本。

开源许可证及其常见类型


开源软件许可证(Open Source Software License)是一种法律许可,是开源软件供应商用于授权软件使用者使用、修改和发布其开源软件的协议。其目的是规范软件(受著作权保护的软件)使用或者分发行为。

世界上有上百种开源许可证,目前主流的有 6 种:

  1. Apache:发布于 Apache 软件基金会。此许可证允许商业使用,不强制要求源代码开放,是目前使用最广的开源软件许可证之一。

  2. MIT:极其宽松的许可证,允许商业使用和私有化修改后的代码。MIT 许可证要求保留版权信息,但不强制开源修改后的代码。案例项目有 GitLab CE、Ruby、JQuery、Rails 、Vue、React 等。

  3. GPL:GNU 通用公共许可协议(GNU General Public License),是自由软件基金会发布的许可证。GPL 要求使用软件的修改版本必须采用同样的 GPL 协议发布,即如果项目包含了 GPL 许可证的代码,那么整个项目都必须使用 GPL 许可证

  4. BSD:宽松的开源许可证,允许商业使用和修改私有化。与 MIT 许可证的主要区别是不要求保留版权信息。案例项目有 Curl 等。

  5. LGPL:Lesser General Public License,是 GPL 的补充,区别在 LGPL 只要求修改的开源组件开源,而不要求整个衍生软件开源。

  6. MPL:Mozilla Public License,发布于 Mozilla 基金会。MPL 要求修改版本必须以 MPL 许可证开源发布,但可以用于商业应用

而许可证由其宽松程度,可分为:

  • Copyleft 许可证:使开源软件及其衍生版本的开源属性代代相传。它强制要求软件必须持续开源,以确保开发者与用户的权利得到最大范围内的保障,实现开源精神的延续。

  • 宽松式许可证:也称为非 Copyleft 许可证,对软件再发布和衍生产品的许可证选择要求更加宽松,允许软件商业使用与闭源,提供更大灵活性与选择性。

从上述概念可以看出,Apache、MIT、BSD 属于宽松式许可证(Permissive License),如下图左侧;GPL 、LGPL、MPL 属于 Copyleft 许可证,如下图右侧。我们需要根据软件属性与商业模式选择恰当的许可证,在开源理念与商业需求间取得平衡

开源许可证扫描是软件研发过程中,不可或缺的工具


开源软件许可证如此之多,不同许可证之间存在较大差异,许可证错误使用的事件时有发生,可能给企业带来法律、运营、安全与采购等领域的重大风险与损失。

根据 Synopsys 发布的《2023 年开源安全与风险分析报告》显示:54% 的代码库存在许可证冲突;31% 的代码库包含没有许可证或使用定制许可证的开源代码。

开源软件应用风险突出,开源许可证扫描成为企业推动开源管理与风险控制的重要手段之一

许可证扫描(License Scanning)是指对软件、代码库或系统进行许可证冲突检查的过程。它通过自动扫描软件的依赖与组件,检测其许可证之间是否存在不兼容或冲突的问题。

开源许可证扫描作为帮助企业安全采用开源关键技术,其重要性与必要性是显而易见的。因此越来越多的软件企业关注并实施开源许可证扫描,常见方式有:

  • 集成第三方扫描工具。在代码 Push、Build 等时触发扫描。这需要购买第三方工具许可与维护成本,集成过程比较复杂。

  • 定期人工扫描。开发团队定期分析代码与依赖,手工识别开源组件与许可证,更新许可证清单。这种方式效率低下,无法覆盖全部依赖,难以持续进行。

  • CI 流程集成。在持续集成流程中增加开源许可证扫描步骤,在每次构建时运行扫描工具,生成报告。这需要选择与 CI/CD 工具兼容的扫描工具,也增加了配置与维护难度。

  • 增加管理流程。制定开源许可证管理流程,在组件引入、版本升级等环节进行审核,要求提供相应的许可证清单与合规性证明。其缺点是大量增加了开发与管理成本,实施难度也较大。

极狐GitLab 开源许可证扫描的优势与应用


相比上述方式,极狐GitLab 的开源许可证扫描具有明显优势:

  1. 原生集成。极狐GitLab 内置开源许可证扫描功能,深度集成在极狐GitLab CI/CD 流程中,无需集成第三方工具,即可使用,配置简单,无额外维护成本。

  2. 高度自动化。极狐GitLab 会自动实时监测开源依赖变化,并触发扫描,每一次代码提交若产生新的许可证都有记录,可逆追踪。

  3. 简单易用。极狐GitLab 扫描结果以简明方式展示,并提供修复建议,降低开源管理的使用门槛;并支持多种语言和包管理器,方便开发者参与。

  4. 灵活自定义。极狐GitLab 支持自定义许可证与扫描规则,可以完全匹配企业的开源管理要求。同时也提供丰富的预置规则,覆盖主流开源许可证。

  5. 持续优化。极狐GitLab 会继续扩充许可证库,增强扫描准确性,并结合用户反馈持续完善与优化扫描功能,确保项目符合法规要求和企业政策、审计政策等。

图:极狐GitLab 许可证扫描支持多种语言和包管理器

Step 1:启用及设置许可证策略

极狐GitLab 许可证扫描的前提条件是:

  • 具有 Docker 或 Kubernetes 执行器的 Runner;

  • Docker Engine 版本高于 18.09.03。

在流水线中启用许可证扫描(将在下文中详解):

include:
  - template: License-Scanning.gitlab-ci.yml

MR 审核者十分关心:在 MR 合并审批请求过程当中,当前新源头分支引入了哪些新的许可证?

这个问题通过「License-Check」来查看。

在极狐GitLab 15.9 之前版本,通过「项目 → 设置 → 合并请求 → 合并请求批准,启用 License - Check」启用检查,如下图:

具体放行和拒绝哪些许可证,则在「安全与合规 → 许可证合规性」中设置策略,如下图。

极狐GitLab 15.9 以及之后的版本,通过「项目 → 安全与合规 → 策略 → 新建策略 → 选择 扫描结果策略」设置:

Step 2:自动创建策略文件存放项目

极狐GitLab 15.9 以及之后的版本,在创建策略后,会自动创建单独的项目存放策略文件(YAML),如下图子目录是 Security policy project,用户可以通过代码方式直接去编写 YAML 文件,实现快速扫描策略编写。

Step 3:查看许可证合规情况

与查看其他安全扫描一样,通过「安全与合规 → 许可证合规」,查看最新的合规情况:当前项目用了哪些开源组件,以及它所遵循的协议;还可以看到每个组件当前是拒绝,还是遵循了策略等。

Step 4:查看 MR 审批结果

只要开启了许可证扫描,就可以看到 License - Check 信息。

如下图,在本次 MR 合并之前,在原分支扫描显示新引入许可证分类,如已拒绝、已通过等提示信息来帮助审核者来判断本次合并是否批准。

如下图,在流水线页面,也可以查看完整许可证详细信息。

YAML 、license-finder、报告文件解析


YAML

上文提到,应用两行代码即可启用许可证扫描:

include:
  - template: License-Scanning.gitlab-ci.yml

下图就是 YAML 文件的庐山真面目,包含了两个部分:

  • variables:定义变量,用于在 job 中引用;

  • license_scanning:定义许可证扫描 job。

变量

其中,极狐GitLab 自动预定义了 3 个变量:

  1. SECURE_ANALYZERS_PREFIX:定义安全分析工具的前缀,用于从极狐GitLab Container Registry 中拉取正确的镜像;

  2. LICENSE_MANAGEMENT_SETUP_CMD:定义许可证扫描工具的安装命令;

  3. LICENSE_MANAGEMENT_VERSION:定义许可证扫描工具的版本。目前最新版本为 “4”。

许可证扫描的常用变量如下表。也可以访问极狐GitLab 文档中心查看。

license_scanning

license_scanning job 用于执行开源许可证扫描,调用极狐GitLab 内置的 license-scanning 工具对仓库代码进行扫描,检测项目开源依赖与许可证信息。

如下图,license_scanning job 支持的主要字段如下:

  • image:定义扫描所使用的镜像;

  • variables:定义扫描所需的变量,比如报告存储路径与可见性等;

  • script:执行扫描命令;

  • artifacts: 定义扫描结果存档配置;

  • rules:定义扫描规则。

license-finder

license-finder 是一个帮助扫描项目中所使用的开源软件许可证信息的工具。运行 license-finder 时,它会扫描项目中的依赖项,并尝试查找每个依赖项的许可证信息,详情查看极狐GitLab 许可证查找器。

以极狐GitLab 前端用 NPM 管理的项目为例:

  • 初始化:NPM install 安装相关依赖;

  • 扫描:

    • 自动检测到项目中的 package.json 文件;

    • 解析内容,找到 dependencies 以获取依赖项信息;

    • 递归检查每个依赖项及其子依赖项,获取它们的许可证信息。

  • 结果报告:收集扫描到的结果到报告里。

那么, license-finder 怎么查找许可证?

1. 包管理器的配置文件,如 package.json,可以用 license 字段声明当前库的许可证:

2. 依赖项的源代码中的许可证声明,如许可证文件或代码中的许可证注释:

报告文件

 在 license_scanning  job 里,指定保留 gl-license-scanning-report.json 文件。

用户可以在 pipeline 页面的 “Artifacts” 选项卡中下载该报告文件。下载的 json 文件如下所示,dependencies 具体列出所有检出的开源依赖,包括名称、版本、许可证类型等信息。

开源软件是软件企业持续依赖与运用的重要资源。开源许可证扫描必不可少,其广泛应用也将成为企业开源管理的标配与常态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Linux开发>驱动开发 -之-gpio子系统

<Linux开发>驱动开发 -之-gpio子系统 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记录&…

vue实现倒计时功能

vue实现倒计时功能 首先我们需要一个 Vue. js的函数,这个函数用于实现倒计时,这里我们采用 vue. js的 import来实现,这是 vue. js的一个特殊功能,将函数调用的参数以列表的形式加入到函数中,当在函数执行完后返回结果。…

Java基础--->IO流(2)【常见IO模型】

文章目录 计算机角度IO操作系统IO常见的IO模型Java 中 3 种常见 IO 模型BIO(BlockingI/O)【同步阻塞IO】NIO(Non-blocking/New I/O)【非阻塞IO】IO多路复用AIO(Asynchronous I/O)【异步IO】 计算机角度IO 根…

进攻中型SUV,蔚来/小鹏的智能化「满配」能否撬动需求

251.29万辆,这是2022年中国市场(不含进出口)乘用车中型SUV交出的答卷,交付量仅次于紧凑型SUV,排名细分市场第二。在这份成绩单中,有几个数字特别醒目。 1、31.64万辆,这是排名这个细分市场交付量…

chatgpt赋能python:Python交易股票:掌握交易技巧,开启财富增长之路

Python 交易股票:掌握交易技巧,开启财富增长之路 股票市场一直以来都是吸引人们收益的地方,不断变化的市场行情也让每一位投资者都不得不面对各种风险。然而,如果您懂得运用好 Python 来交易股票,就能够更好地理解市场…

【软考-中级】系统集成项目管理工程师 【14 采购管理】

持续更新。。。。。。。。。。。。。。。 【第十四章】采购管理 2 分 14.1采购管理的相关概念和主要过程14.1.1 概念和术语14.1.2 采购管理的主要过程 14.2编制采购管理计划14.2.1编制采购计划的输入、输出14.2.2用于编制采购计划过程的技术和方法14.2.3工作说明书 历年真题202…

小程序外包开发上线流程

小程序有非常多的优势,无需下载安装、使用方便、开发成本低、覆盖广泛、轻量级、方便推广,这些特点使得小程序非常适合场景不太复杂的场合,这些年出现了大量的小程序。今天和大家分享一下小程序的一些特点和上线流程,希望对大家有…

C#,码海拾贝(21)——“全选主元高斯消去法“求解“线性方程组“的C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static class LEquations { /// <summary> /…

mysql倒库操作遇到的问题

背景&#xff1a;本地windows 10安装了mysql数据库后&#xff0c;需要把远程库的表结构和数据全部导入进来。 操作&#xff1a;导出数据库&#xff0c;导入数据库。 第一步&#xff1a;导出数据库 使用dump命令即可。 登陆mysql数据库 mysql -hhost --default-character-s…

springboot整合ueditor有源码

在项目用到ueditor插件来编辑信息&#xff0c;初次接触&#xff0c;遇到各种问题&#xff0c;到目前为止&#xff0c;也只是基本实现了功能&#xff0c;简单记录一下过程&#xff0c;希望对初次使用ueditor的朋友们有所帮助。 ueditor就不介绍了&#xff0c;或对ueditor还不了…

尝试 python flink

引入pyflink库 启动anaconda的终端窗口 执行命令 pip install apache-flink1.13.2 等待安装flink相关库

< ElementUi组件库: el-progress 进度条Bug及样式调整 >

ElementUi组件库&#xff1a; el-progress 进度条Bug及样式调整 &#x1f449; 前言&#x1f449; 一、实现原理> 修改 el-progress 进度条样式 及 渐变进度条样式 &#x1f449; 二、案例代码&#xff08;前言效果图案例&#xff09;> HTML代码> CSS代码 &#x1f44…

详细解读Diffuser DreamBooth代码

Diffusion Models专栏文章汇总:入门与实战 前言:之前的博客《如何定制属于自己的stable diffusion?Dreambooth原理详解和代码实战》详细解读了dreambooth,不过那篇博客的代码讲解部分主要基于mmagic,不过瘾。这篇博客讲解一下diffuser的drembooth的部分。 目录 参数详解…

C#,码海拾贝(24)——求解“复系数方程组”的“全选主元高斯-约当消去法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

Ansible从入门到精通【一】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 Ansible初识 ansible基于Python开发&#…

关闭linux kernel内核的启动log在控制台的输出

要关闭Linux内核的启动日志&#xff0c;你可以通过以下方法之一进行操作&#xff1a; 1. 通过引导加载器配置&#xff1a; 打开引导加载器的配置文件&#xff0c;如GRUB的配置文件 /boot/grub/grub.cfg。 在内核的启动行&#xff08;以 “linux” 或 “kernel” 开头&#xf…

MyBatisPlus快速入门(二)MyBatisPlus快速入门体验

一、初始化数据库&#xff08;基于 HeidiSQL&#xff09;1.1 创建数据库1.2创建数据表1.3 初始化数据 二、初始化项目&#xff08;基于Spring Boot&#xff09;2.1 创建项目2.2 新增依赖2.3 数据库配置2.4 配置 MyBatis Plus2.5 创建实体类2.6 创建Mapper层接口2.7 创建Server层…

怎么用迅捷PDF转换器在线修改图片大小

大家在生活和工作中会遇到图片的大小尺寸不合适的情况&#xff0c;尤其是一些公用的照片&#xff0c;都会有固定的尺寸要求。或者是一些同学想要考研考公考编之类的&#xff0c;也需要严格按照规定来修改图片。那么怎么才能快速修改图片大小呢&#xff1f; 推荐大家使用迅捷PD…

OpenVINO 2022.3实战四:POT API 实现 YOLOv5 模型 INT8 量化

OpenVINO 2022.3实战四&#xff1a;POT API 实现 YOLOv5 模型 INT8 量化 将预训练的 YOLOv5m Pytorch 模型转换为 OpenVINO™ FP32 Intermediate Representation (IR) 模型。下一步&#xff0c;通过 OpenVINO™ Post-Training Optimization Tool (POT) API 来定义客制化DataLo…

Linux之文件权限类命令

文件权限类命令 文件属性 Linux系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。为了保护系统的安全线&#xff0c;Linux系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定&#xff0c;在…