支持Laravel.io的持续发展 →

防止安装带有已知安全漏洞的Composer依赖项

2023年1月11日 5分钟阅读

介绍

使用其他开发者在全球构建现代PHP Web应用程序的一个重要组成部分是使用包和库。

由于这个原因,有可能存在许多你无法控制的变动部件。因此,有可能在你的PHP项目中安装带有已知漏洞的依赖项。这些漏洞可能是意外引入的漏洞,或者是有意添加的供应链攻击

为了减少将易受攻击的依赖项引入您项目的可能性,您可以使用“Roave Security Advisories” (roave/security-advisories) 等工具。

因此,在这篇Quickfire文章中,我们将讨论如何使用Roave Security Advisories来防止将带有已知安全漏洞的Composer依赖项安装到您的PHP项目中。

什么是Roave Security Advisories?

Security Advisories是由Roave提供的一个Composer包,它可以阻止您安装其他具有已知漏洞的Composer依赖项。

开始使用它非常简单(我们稍后会进一步探讨)。

该封装包并不包含任何实际的PHP代码,而是主要包含一个composer.json文件,该文件在尝试安装有漏洞依赖时会导致Composer发生冲突。

还有一些其他工具,例如EnlightnDependabot,这些工具可以帮助您检测项目中存在安全漏洞的依赖项。但我更愿意将这些类型的工具视为“被动”的。换句话说,它们可以在您在项目中安装了这些漏洞依赖后通知您。这可能会导致您在最初不知情的情况下将潜在的安全漏洞引入到您的应用程序中。但这绝不贬低这些类型的工具。在框架、外包和库中总会有漏洞被发现。因此,能够检测到它们是保持您项目安全的好方法。

然而,“安全公告”略有所不同,可以被视为更“主动”的工具。这意味着它实际上阻止您安装带有已知漏洞的依赖项。但它也可以用作审计工具,旨在“被动”检测已安装在应用程序中的漏洞依赖项。

值得注意的是,该封装包只会阻止您安装已知漏洞的依赖项。这意味着如果尚未被检测和记录的漏洞,仍然可以安装受漏洞影响的封装包。

如何使用Roave安全公告

要开始使用安全公告,您可以在项目根目录运行以下命令,将其作为require-dev依赖项添加到您的项目中。

composer require --dev roave/security-advisories:dev-latest

如果您目前尚未使用任何已知漏洞的依赖项,roave/security-advisories应该现在已成功安装。然而,如果您有漏洞封装包,安装将失败,并显示哪个封装包引起问题。

现在,每次运行composer requirecomposer update时,如果正在安装或更新的任何封装包具有已知漏洞,安全公告将阻止安装,并迫使Composer抛出错误。

以一个例子来说明,假设我们想安装一个已知存在漏洞的Laravel版本(8.22.1)。如果我们运行composer require laravel/framework:8.22.1,则在我们的终端中,Composer会输出以下内容

./composer.json has been updated

Running composer update roave/security-advisories
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/framework is locked to version v8.22.1 and an update of this package was not requested.
    - roave/security-advisories dev-latest conflicts with illuminate/database <6.20.26|>=7,<7.30.5|>=8,<8.40 (laravel/framework v8.22.1 replaces illuminate/database self.version).
    - Root composer.json requires roave/security-advisories dev-latest -> satisfiable by roave/security-advisories[dev-latest].

Installation failed, reverting ./composer.json and ./composer.lock to their original content.

如您所见,安全公告阻止了这个版本laravel/framework被安装。

重要的是要记住,这些检查只有在运行composer requirecomposer update命令时才会执行。因此,如果您只运行composer install并且有有效的composer.lock文件,它就不会检测到您依赖项中的任何漏洞。

然而,如果您想检查您当前的依赖项,以查找自上次更新依赖项以来可能已发现的任何漏洞,您可以运行以下命令

composer update --dry-run roave/security-advisories  

这将模拟更新依赖项,但实际上不会对供应商文件做出任何更改。

由于该封装包的性质和其工作方式,没有添加任何标记版本。这意味着您需要继续使用dev-latest版本,这样每次您更新封装包时,都可以获取到更新的漏洞依赖项列表。

结论

希望这篇文章能向您展示您如何在PHP项目中开始使用Roave安全公告,以防止您安装已知安全漏洞的依赖项。

如果您喜欢阅读这篇文章,我很乐意听到您的想法。同样,如果您有任何改进未来文章的意见,我也很乐意听到。

您可能还会对查看我的220多页电子书Battle Ready Laravel感兴趣,该电子书更深入地讨论了类似的主题。

如果您希望每次我发布新文章时都能得到更新,欢迎免费订阅我的时事通讯

继续构建精彩之作!🚀

上次更新1年前。

driesvints 我喜欢这篇文章

1
喜欢这篇文章? 让作者知道并为他们的作品鼓掌!
ash-jc-allen (Ash Allen) 我是一位来自英国的普雷斯顿的独立Laravel网页开发者。我维护Ash Allen Design博客,并参与了许多有趣和令人兴奋的项目 🚀

你可能还喜欢以下文章

2024年3月11日

如何在Larastan的帮助下将您的Laravel应用从0做到9

在Laravel应用执行前发现错误是可能的,这得益于Larastan...

阅读文章
2024年7月19日

在无需特性的情况下标准化API响应

我注意到,大多数用于API响应的库都是使用特性实现的,...

阅读文章
2024年7月17日

在您的Laravel项目中通过Discord通知收集反馈

如何在Laravel项目中创建一个反馈模块,并在收到消息时收到Discord通知...

阅读文章

我们感谢这些 非常棒的公司 对我们的支持

您的标志在这里?

Laravel.io

Laravel问题解决、知识分享和社区建设的门户。

© 2024 Laravel.io - 版权所有。