18910140161

技术文档| OpenSCA技术原则对composer的依赖性分析

顺晟科技

2023-02-20 16:03:42

110

开放斯卡知识小教室开课了!

今天重点介绍基于composer软件包管理器的组件组件分析原理。

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.lock检测结果示例

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。

因此,组件相关结构如下:

以这种方式进行层次分析,可以获得整个项目的相关性信息。

图:composer.json检测结果示例

感谢开源社区成员对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

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航