Fichier de verrouillage manquant entraînant des dépendances non épinglées¶
Vérifie la présence des manifestes de gestion des dépendances (par exemple, package.json, Gemfile, pyproject.toml, Pipfile, go.mod, etc.) sans un accompagnement de fichier de verrouillage qui fixe cryptographiquement les dépendances (par exemple, package-lock.json, Gemfile.lock, poetry.lock, Pipfile.lock, go.sum).
L'Importance des Fichiers de Verrouillage des Dépendances pour une Gestion Cohérente, Sécurisée et Prévisible des Dépendances¶
Les fichiers de verrouillage des dépendances jouent un rôle crucial dans le développement logiciel moderne, permettant aux équipes de créer des environnements cohérents, sécurisés et prévisibles à travers les différentes étapes du cycle de vie du logiciel. Pour les développeurs, les fichiers de verrouillage ne sont pas simplement un autre fichier dans un dépôt, ils sont essentiels pour maintenir des builds cohérents, améliorer la sécurité et simplifier la collaboration. Cet article explore l'importance des fichiers de verrouillage, les avantages qu'ils apportent et leur mise en œuvre spécifique dans les principaux langages de programmation.
Pourquoi les Fichiers de Verrouillage des Dépendances Sont-Ils Importants¶
1. Cohérence entre les Environnements¶
Les fichiers de verrouillage enregistrent les versions exactes de chaque dépendance, ainsi que des sous-dépendances, dont un projet dépend. En stockant ces versions spécifiques, les fichiers de verrouillage éliminent les incohérences entre les environnements (développement, staging, production). Lorsque le même fichier de verrouillage est utilisé, les développeurs peuvent être confiants que chaque installation recrée exactement le même environnement chaque fois, réduisant le risque de problèmes de type "ça fonctionne sur ma machine".
2. Sécurité Renforcée¶
L'utilisation de fichiers de verrouillage des dépendances est une mesure de sécurité forte. Les fichiers de verrouillage aident à protéger les applications contre les vulnérabilités liées aux dépendances en prévenant des mises à jour inattendues qui pourraient introduire des versions non sécurisées. Les vulnérabilités de sécurité dans les dépendances sont courantes, et en contrôlant quelles versions sont installées, vous obtenez un meilleur contrôle sur les risques de sécurité.
3. Collaboration Améliorée¶
Pour les équipes travaillant sur le même projet, les fichiers de verrouillage garantissent que chaque développeur, quelles que soient ses configurations locales, travaille avec des versions de dépendance identiques. Cette cohérence est cruciale pour les équipes, permettant une collaboration plus fluide et réduisant les frictions lors de la révision et de la fusion des modifications de code.
4. Nomenclature logicielle (SBOM)¶
Les fichiers de verrouillage sont essentiels pour la génération d'une Nomenclature logicielle (SBOM), qui est de plus en plus importante pour le suivi des chaînes d'approvisionnement logicielle. Par exemple, Trivy, un analyseur de sécurité, peut générer une SBOM pour l'analyse de sécurité des dépendances, mais il nécessite un fichier de verrouillage pour fonctionner efficacement. Sans un tel fichier, la SBOM ne refléterait pas avec précision les dépendances du projet et leurs vulnérabilités associées, ce qui donnerait une image incomplète et probablement incorrecte de la réalité dans l'environnement de production.
Où la Règle Recherche un Fichier de Verrouillage¶
Un manifeste de dépendances est signalé lorsqu'aucun des fichiers de verrouillage acceptés pour ce manifeste n'est trouvé. Les sections ci-dessous listent, pour chaque langage, les manifestes qui sont vérifiés et les fichiers de verrouillage qui les satisfont.
Certains gestionnaires de paquets conservent un unique fichier de verrouillage au-dessus des projets qu'il couvre plutôt qu'à côté de chaque manifeste. Pour ceux-ci, la recherche commence dans le répertoire contenant le manifeste et remonte jusqu'à la racine du dépôt, de sorte qu'un espace de travail ou un monorepo possédant un seul fichier de verrouillage à sa racine n'est pas signalé :
Cargo.lockpour les membres d'un espace de travail Cargouv.lockpour les membres d'un espace de travail uvcabal.project.freezepour un paquet*.cabalsitué sous le répertoire contenant le fichier freeze*.deps.jsonet*Packages.propspour les projets .NET, couvrant unDirectory.Packages.propsvalable pour tout le dépôt et la sortie de build écrite dans un répertoirebin/partagé
Fichiers de Verrouillage des Dépendances par Langages¶
JavaScript¶
- Manifeste :
package.json— un manifeste ne déclarant aucune dépendance n'est pas signalé - Gestionnaire de dépendances : npm / Yarn / pnpm / Bun
- Lockfile :
package-lock.jsonounpm-shrinkwrap.json(npm),yarn.lock(Yarn),pnpm-lock.yaml(pnpm),bun.lockoubun.lockb(Bun) - Génération/Maintenance :
- Documentation npm sur
package-lock.json - Documentation npm sur
npm-shrinkwrap.json - Documentation Yarn sur
yarn.lock - Documentation pnpm sur
pnpm-lock.yaml - Documentation Bun sur
bun.lock
Python¶
- Manifeste :
pyproject.toml,Pipfile - Gestionnaire de dépendances : Poetry / uv / PDM / pip / Pipenv
- Lockfile :
poetry.lock,pdm.lock,pylock.tomloupyproject.lockà côté d'unpyproject.toml,uv.lockau niveau du projet ou à la racine de l'espace de travail au-dessus, etPipfile.lockà côté d'unPipfile. Unrequirements.txtn'est pas accepté comme fichier de verrouillage. - Génération/Maintenance :
- Documentation Poetry sur
poetry.lock - Documentation uv sur
uv.lock - Documentation PDM sur
pdm.lock - Spécification Python Packaging pour
pylock.toml - Documentation pip sur
pip lock - Documentation Pipenv sur
Pipfile.lock
Go¶
- Manifeste :
go.mod - Gestionnaire de dépendances : Go Modules
- Lockfile :
go.sum - Génération/Maintenance :
- Documentation Go Modules sur
go.sum
Java¶
- Manifeste :
build.gradle,build.gradle.kts— les projets Maven ne sont pas vérifiés par cette règle - Gestionnaire de dépendances : Gradle
- Lockfile :
gradle.lockfile,buildscript-gradle.lockfileetgradle/verification-metadata.xml - Génération/Maintenance :
- Documentation Gradle sur le Verrouillage des Dépendances
- Documentation Gradle sur la Verification metadata
Scala¶
- Manifeste :
build.sbt - Gestionnaire de dépendances : sbt
- Lockfile :
build.sbt.lock - Génération/Maintenance :
- Plugin sbt Dependency Lock
.NET / C¶
- Manifeste :
*.csproj,*.fsproj,*.vbproj - Gestionnaire de dépendances : NuGet
- Lockfile :
packages.lock.json,packages.config, une sortie de build*.deps.jsony compris celle écrite sousbin/, ou un*Packages.propstel que leDirectory.Packages.propsutilisé pour la Gestion Centralisée des Paquets - Génération/Maintenance :
- Documentation de Microsoft
- Documentation NuGet sur la Gestion Centralisée des Paquets
- Documentation NuGet sur
packages.config
Ruby¶
- Manifeste :
Gemfile,gems.rb - Gestionnaire de dépendances : Bundler
- Lockfile :
Gemfile.lock(pour unGemfile),gems.locked(pour ungems.rb) - Génération/Maintenance :
- Documentation Bundler sur
Gemfile.lock - Documentation Bundler sur
gems.rb
PHP¶
- Manifeste :
composer.json - Gestionnaire de dépendances : Composer
- Lockfile :
composer.lock, ouvendor/composer/installed.jsonlorsque le répertoire vendor est commité - Génération/Maintenance :
- Documentation Composer sur
composer.lock - Documentation Composer sur le fait de commiter le répertoire vendor
Rust¶
- Manifeste :
Cargo.toml - Gestionnaire de dépendances : Cargo
- Lockfile :
Cargo.lock, à côté du crate ou dans n'importe quel répertoire au-dessus jusqu'à la racine du dépôt - Génération/Maintenance :
- Documentation Cargo sur
Cargo.lock - Documentation Cargo sur les Espaces de Travail
Objective-C / Swift¶
- Manifeste :
Package.swift,Podfile - Gestionnaire de dépendances : CocoaPods, Swift Package Manager
- Lockfile :
Podfile.lock(pour unPodfile),Package.resolved(pour unPackage.swift) - Génération/Maintenance :
- Documentation CocoaPods sur
Podfile.lock - CocoaPods et Fichiers de Verrouillage (Route 85)
- Documentation d'Apple sur
Package.resolved
Elixir¶
- Manifeste :
mix.exs - Gestionnaire de dépendances : Mix
- Lockfile :
mix.lock - Génération/Maintenance :
- Documentation Mix sur la Gestion des Dépendances
Dart¶
- Manifeste :
pubspec.yaml - Gestionnaire de dépendances : pub
- Lockfile :
pubspec.lock - Génération/Maintenance :
- Documentation Dart sur
pubspec.lock
C/C++¶
- Manifeste :
conanfile.txt,conanfile.py - Gestionnaire de dépendances : Conan
- Lockfile :
conan.lock - Génération/Maintenance :
- Documentation Conan sur les Fichiers de Verrouillage
Julia¶
- Manifeste :
Project.toml - Gestionnaire de dépendances : Pkg
- Lockfile :
Manifest.toml - Génération/Maintenance :
- Documentation Julia Pkg sur
Manifest.toml
Haskell¶
- Manifeste :
*.cabal,stack.yaml - Gestionnaire de dépendances : Cabal, Stack
- Lockfile :
cabal.project.freeze(pour un*.cabal, à côté de celui-ci ou dans n'importe quel répertoire au-dessus jusqu'à la racine du dépôt),stack.yaml.lock(pour unstack.yaml) - Génération/Maintenance :
- Documentation Cabal sur
cabal freeze - Documentation Stack sur les Fichiers de Verrouillage
R¶
- Manifeste :
DESCRIPTION - Gestionnaire de dépendances : renv
- Lockfile :
renv.lock - Génération/Maintenance :
- Documentation renv
- Documentation renv sur le Fichier de Verrouillage
Étapes pour Créer un SBOM avec Trivy¶
Pour que la fonctionnalité SBOM de Trivy fonctionne correctement, il est essentiel d'avoir un fichier de verrouillage à jour. Les fichiers de verrouillage contiennent des métadonnées nécessaires pour générer une SBOM qui représente avec précision les dépendances, les versions et les vulnérabilités de sécurité potentielles du projet.