技术文档| OpenSCA技术原则对composer的依赖性分析
OpenSCA知识小课堂开课了!今天主要介绍基于composer包管理器的组件成分解析原理。composer介绍composer是PHP的依赖管理工具。开发者受到Node.js的npm及Ruby的b
顺晟科技
2023-02-20 16:03:42
110
开放斯卡知识小教室开课了!
今天重点介绍基于composer软件包管理器的组件组件分析原理。
composer是PHP的从属管理工具。
开发者受到Node.js的NPM和Ruby的bundler的启发,composer设计与这两者有很多相似之处。
Composer的从属管理文件为composer.json。开发人员可以在composer.json中指定每个相关性的版本范围,也可以使用composer require/update/remove $ { name }命令管理相关性。
如果项目中有composer.json文件,则可以运行composer install命令自动安装当前项目所需的相关性,并生成composer.lock文件。
Composer.json的完整文件结构如下:
{
名称& amp# 039;& amp# 039;cakephp/app & amp;# 039;
类型& amp# 039;& amp# 039;项目& amp# 039;
License & amp# 039;& amp# 039;MIT & amp# 039;
Require & amp# 039;{
Php & amp# 039;& amp# 039;=7.2 & amp# 039;
cakephp/cakephp & amp;# 039;& amp# 039;4.3 & amp# 039;
cakephp/migrations & amp;# 039;& amp# 039;3.2 & amp# 039;
cakephp/plug in-installer & amp;# 039;& amp# 039;1.3 & amp# 039;
mobile detect/mobiledetectlib & amp;# 039;& amp# 039;2.8 & amp# 039;
},
require-dev & amp;# 039;{
CAKEPHP/BAKE & AMP;# 039;& amp# 039;2.6 & amp# 039;
cakephp/cakephp-code sniffer & amp;# 039;& amp# 039;4.5 & amp# 039;
cakephp/debug _ kit & amp;# 039;& amp# 039;4.5 & amp# 039;
Jose Gonzalez/dot env & amp;# 039;& amp# 039;3.2 & amp# 039;
PHP unit/PHP unit & amp;# 039;& amp# 039;~ 8 . 5 . 0 | | | 9 . 3 & amp;# 039;
},
}其中name是项目名称。类型是包类型,包括库、项目、元包、合成器插件等。默认值为库。许可证是为项目声明的许可证,可以是字符串或字符串数组。
Require-dev是用于开发环境或测试的依存关系,Require是用于生产环境的依存关系,从属标记法是& amp# 039;name & amp# 039;& amp# 039;version & amp# 039;版本可以指定正确的版本或范围。
composer.lock
Composer.lock文件是自动生成的文件,可以准确定位PHP项目使用的相关性和版本,因此优先解析composer.lock文件。
Composer.lock文件的结构如下:
{
Packages & amp# 039;[
{
名称& amp# 039;& amp# 039;a & amp# 039;
Version & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;
Require & amp# 039;{
C & amp# 039;& amp# 039;1.1。* & amp# 039;
}
},
{
名称& amp# 039;& amp# 039;b & amp# 039;
Version & amp# 039;& amp# 039;1 . 2 . 2 & AMP;# 039;
Require & amp# 039;{
C & amp# 039;& amp# 039;1 . 0 . 2 & AMP;# 039;
}
},
{
名称& amp# 039;& amp# 039;c & amp# 039;
Version & amp# 039;& amp# 039;1 . 1 . 2 & AMP;# 039;
}
],
packages-dev & amp;# 039;[]
}其中packages和packages-dev字段包含项目中使用的所有直接和间接依赖关系,记录了组件之间的依赖关系,packages记录了操作环境依赖关系,packages-dev记录了开发环境依赖关系。
例如:
{
名称& amp# 039;& amp# 039;a & amp# 039;
Version & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;
Require & amp# 039;{
C & amp# 039;& amp# 039;1.1。* & amp# 039;
}
}表示项目依赖于版本1.1.0的组件a,版本限制为1.1 .*表示依赖于组件c。
同样,您可以看到项目依赖于1.2.2版本的程序集B,依赖于版本约束为1.0.2的程序集C。
此外,组件A和组件B不依赖于其他从属关系,因此可以看出两个组件是项目的直接从属关系。
注意:
1.1。*表示需要版本号=1.1.0和1.2.0
1.0.2表示需要版本号=1.0.2和2.0.0
这使您可以创建当前项目的从属结构。
实线表示直接依赖性,虚线表示间接依赖性
Composer.json
这是为Composer.json开发人员管理的从属管理文件,在找不到composer.lock文件时解析。
Composer.json仅包含直接相依性,建立专案时,请从Composer仓储下载必要的间接相依性,并将其建置到composer.lock档案中。因此,您可以模拟composer构建过程,以获得项目参考的组件相关性。
Composer.json文件结构如下:
{
名称& amp# 039;& amp# 039;foo & amp# 039;
类型& amp# 039;& amp# 039;项目& amp# 039;
License & amp# 039;& amp# 039;MIT & amp# 039;
Require & amp# 039;{
A & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;
B & amp# 039;& amp# 039;1 . 2 . 0 & AMP;# 039;
},
require-dev & amp;# 039;{},
}require是项目实际使用的直接相关性,require-dev是项目开发使用的直接相关性。
例如:
A & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;表示项目相关版本约束为1.1.0的组件a。
B & amp# 039;& amp# 039;1 . 2 . 0 & AMP;# 039;表示项目相关版本约束为1.2.0的组件b。
这里,我们可以总结以下图片相关性。
实线表示直接依赖关系
通过此相关性,您可以查看项目组件的直接相关性以及组件的版本范围,但不知道组件依赖的特定版本。
如果没有Composer.lock文件,则必须从Composer仓库下载该组件的详细信息,以获得准确的从属版本和间接相关性的详细信息。
例如,组件a的详细结构如下:
{
Packages & amp# 039;{
A & amp# 039;[
{
Version & amp# 039;& amp# 039;1 . 0 . 1 & AMP;# 039;
Require & amp# 039;{
C & amp# 039;& amp# 039;1 . 0 . 0 & amp;# 039;
}
},
{
Version & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;
Require & amp# 039;{
C & amp# 039;& amp# 039;1 . 1 . 0 & AMP;# 039;
}
}
]。
}
}其中packages字段是组件和每个版本信息的映射,require字段是组件的相关性信息。
在本例中,组件a的约束为1.1.0。需要版本号=1.1.0和2.0.0,因此请选择版本1.1.0。
因此,组件相关结构如下:
以这种方式进行层次分析,可以获得整个项目的相关性信息。
感谢开源社区成员对OpenSCA的支持和贡献。
OpenSCA的代码在GitHub和Gitee中不断重复,欢迎明星和Star,成为开源贡献者,并可以向Issues提交问题或建议。我将参考大家的建议,继续改进OpenSCA开源项目。请期待更多的功能支持。
开放斯卡主页:
https://opensca.xmirror.cn/
GitHub:
https://github . com/xmirror security/open SCA-CLI/releases
Gitee:
https://gitee . com/xmirror security/open SCA-CLI/releases
20
2023-02
29
2022-11
28
2022-11
29
2022-10
15
2022-09
13
2021-09