Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Bibliothèques

Dépôts de dépendances

La gestion de bibliothèques externes est intégrée dans l'outil Cargo. Plusieurs moyens existent pour définir la provenance de ces bibliothèques, certains sont donnés dans la suite.

On rappelle que le traçage exact des versions de ces bibliothèques est une condition importante de la bonne sécurité des logiciels écrits en Rust. Ce besoin est matérialisé par la règle DENV-CARGO-LOCK.

Crates

En complément de la bibliothèque standard du langage, l'outil cargo fournit un moyen pratique d'intégrer des bibliothèques tierces dans un projet en Rust. Ces bibliothèques, appelées crates dans l'écosystème Rust, sont importées depuis un dépôt central de composants en sources ouvertes.

Un exemple de déclaration de dépendances dans le fichier Cargo.toml.

[dependencies]
mdbook = { version = "0.4.52" }
anyhow = "1.0.99"
clap = { version = "4.5.47", features = ["derive"] }
markdown = { version = "1.0.0", features = ["serde"] }
semver = "1.0.26"
serde_json = "1.0.143"
serde = "1.0.219"

Le dépôt par défaut est crates.io. Il est aussi possible d'utiliser son propre dépôt.

Dépendances Git

Chaque dépendance du fichier Cargo.toml peut également faire référence à un dépôt Git. Par exemple :

[dependencies]
regex = { git = "https://github.com/rust-lang/regex.git" }

Il est possible de spécifier plus en détail la version souhaitée en donnant soit une branche, soit un tag, soit un hash de commit.

Le système de verrou des dépendances est opérant même dans le cas d'un dépôt Git : dans le cas où la dépendance ne spécifie pas un commit en particulier, le commit le plus récent répondant aux critères du fichier Cargo.toml est récupéré au moment de la première compilation et est pérennisé dans le fichier Cargo.lock. Toutes les compilations suivantes utiliseront le même commit (sauf si le fichier Cargo.lock est mis à jour).

Sécurité des dépendances

Quelle que soit la méthode de récupération des dépendances (crate ou commit Git), si elles proviennent d'organisations extérieures, les dépendances doivent faire l'objet d'une validation.

Chaque dépendance tierce directe DOIT être dûment validée, et chaque validation DOIT être tracée.

Concernant les dépendances transitives, il est également recommandé de les valider individuellement.

Chaque dépendance tierce DEVRAIT être dûment validée, et chaque validation DEVRAIT être tracée.

Outils de vérification des dépendances

Cargo-outdated

L'outil Cargo-outdated permet de faciliter la gestion des versions des dépendances.

Pour une crate donnée, l'outil liste les versions utilisées des dépendances (dépendances listées dans le fichier Cargo.toml), et vérifie s'il s'agit de la dernière version compatible disponible ainsi que la dernière version en général.

L'outil cargo-outdated DOIT être utilisé pour vérifier le statut des dépendances. Ensuite, chaque dépendance importée en version obsolète DEVRAIT être mise à jour ou bien, le cas échéant, le choix de la version DOIT être justifié.

Cargo-audit

Cargo-audit est un outil permettant de vérifier s'il existe des vulnérabilités connues dans la RustSec Advisory Database pour les dépendances utilisées dans un projet.

L'outil cargo-audit DOIT être utilisé pour rechercher des vulnérabilités connues dans les dépendances d'un projet.