Checklist
-
Environnement de développement:
- Règle - Utilisation de la chaîne d'outils stable (DENV-STABLE)
-
Rule - Utilisation exclusive du tier 1 de
rustcpour les logiciels de sûreté critiques (DENV-TIERS) - Règle - Mise en dépôt du fichier Cargo.lock (DENV-CARGO-LOCK)
- Règle - Conservation des valeurs par défaut des variables critiques dans les profils cargo (DENV-CARGO-OPTS)
- Règle - Conservation des valeurs par défaut des variables d'environnement à l'exécution de cargo (DENV-CARGO-ENVVARS)
- Recommandation - Utilisation d'un outil de formatage (rustfmt) (DENV-FORMAT)
- Règle - Utilisation régulière d'un linter (DENV-LINTER)
- Règle - Vérification manuelle des réparations automatiques (DENV-AUTOFIX)
-
Bibliothèques:
- Règle - Validation des dépendances tierces directes (LIBS-VETTING-DIRECT)
- Recommandation - Validation des dépendances tierces transitives (LIBS-VETTING-TRANSITIVE)
- Règle - Vérification des dépendances obsolètes (cargo-outdated) (LIBS-OUTDATED)
- Règle - Vérification des vulnérabilités connues pour les dépendances (cargo-audit) (LIBS-AUDIT)
-
Nommage:
- Règle - Respect des conventions de nommage (LANG-NAMING)
-
Gestion des entiers:
- Règle - Utilisation des opérations arithmétiques appropriées au regard des potentiels dépassements (LANG-ARITH)
-
Gestion des erreurs:
-
Recommandation - Mise en place d'un type
Errorpersonnalisé pouvant contenir toutes les erreurs possibles (LANG-ERRWRAP) -
Règle - Non-utilisation de fonctions qui peuvent causer des
panic(LANG-NOPANIC) -
Règle - Test des indices d'accès aux tableaux ou utilisation de la méthode
get(LANG-ARRINDEXING) -
Règle - Gestion correcte des
panic!dans les FFI (LANG-FFIPANIC)
-
Recommandation - Mise en place d'un type
-
Généralités:
- Règle - Interdiction des comportements non définis (UNSAFE-NOUB)
- Règle - Non-utilisation des blocs unsafe (LANG-UNSAFE)
- Règle - Encapsulation des fonctionnalités unsafe (LANG-UNSAFE-ENCP)
-
Gestion de la mémoire:
-
Règle - Non-utilisation de
forget(MEM-FORGET) -
Recommandation - Utilisation du lint clippy pour détecter l'utilisation de
forget(MEM-FORGET-LINT) -
Règle - Non-utilisation de
Box::leak(MEM-LEAK) -
Règle - Libération des valeurs wrappées dans
ManuallyDrop(MEM-MANUALLYDROP) - Règle - Pas de conversion en pointeur raw en Rust non-usafe (MEM-NORAWPOINTER)
-
Règle - Appel systématique à
from_rawpour les valeurs créées avecinto_raw(MEM-INTOFROMRAWALWAYS) -
Règle - Appel de
from_rawuniquement pour les valeurs issues deinto_raw(MEM-INTOFROMRAWONLY) - Règle - Pas de mémoire non initialisée (MEM-UNINIT)
- Règle - Éviter les références comptées récursives mutables (MEM-MUT-REC-RC)
-
Règle - Non-utilisation de
-
FFI:
- Recommandation - Mise en place d'une encapsulation sûre pour les bibliothèques externes (FFI-SAFEWRAPPING)
- Règle - Utilisation exclusive de types compatibles avec le C dans les FFI (FFI-CTYPE)
- Règle - Utilisation de types cohérents pour les FFI (FFI-TCONS)
- Recommandation - Utilisation des outils de génération automatique de bindings (FFI-AUTOMATE)
-
Règle - Utilisation des alias portables
c_*pour faire correspondre les types dépendants de la plateforme d'exécution (FFI-PFTYPE) - Règle - Vérification des valeurs de types non-robustes (FFI-CKNONROBUST)
- Recommandation - Vérification des valeurs externes en Rust (FFI-CKINRUST)
- Règle - Vérification des références provenant d'un langage externe (FFI-CKREF)
- Règle - Non-utilisation des types références au profit des types pointeurs à la frontière avec un langage externe (FFI-NOREF)
- Règle - Vérification des pointeurs externes (FFI-CKPTR)
-
Règle - Marquage des types de pointeurs de fonction dans les FFI comme
externetunsafe(FFI-MARKEDFUNPTR) - Règle - Vérification des pointeurs de fonction provenant d'une FFI (FFI-CKFUNPTR)
-
Règle - Non-utilisation d'
enums Rust provenant de l'extérieur par une FFI (FFI-NOENUM) - Recommandation - Utilisation de types Rust dédiés pour les types opaques externes (FFI-R-OPAQUE)
-
Recommandation - Utilisation de pointeurs vers des
structs C/C++ pour rendre des types opaques (FFI-C-OPAQUE) -
Règle - Non-utilisation de types qui implémentent
Dropdans des FFI (FFI-MEM-NODROP) - Règle - Identification du langage responsable de la libération des données dans les FFI (FFI-MEM-OWNER)
-
Recommandation - Encapsulation des données externes dans un type
Drop(FFI-MEM-WRAPPING) -
Règle - Gestion correcte des
panics dans les FFI (FFI-NOPANIC) - Règle - Exposition exclusive d'API dédiée et compatible avec le C (FFI-CAPI)
-
Bibliothèque standard:
-
Règle - Justification de l'implémentation des traits
SendetSync(LANG-SYNC-TRAITS) - Règle - Respect des invariants des traits de comparaison standards (LANG-CMP-INV)
- Recommandation - Utilisation des implémentations par défaut des traits de comparaison standards (LANG-CMP-DEFAULTS)
- Recommandation - Dérivation des traits de comparaison lorsque c'est possible (LANG-CMP-DERIVE)
-
Règle - Justification de l'implémentation du trait
Drop(LANG-DROP) -
Règle - Absence de
panicdans l'implémentation deDrop(LANG-DROP-NO-PANIC) -
Règle - Absence de cycles de références avec valeurs
Dropables (LANG-DROP-NO-CYCLE) -
Règle - Sécurité assurée par d'autres mécanismes en plus du trait
Drop(LANG-DROP-SEC)
-
Règle - Justification de l'implémentation des traits