---
title: "Trouver les dépendances que n'importe qui pourrait détourner · SourceAnt"
description: "Un paquet interne nommé par un mot simple peut être publié par n'importe qui. SourceAnt évalue déjà chaque dépendance interne selon que son nom porte ou non un propriétaire."
url: "https://sourceant.ai/fr/use-cases/dependency-confusion/"
---

Nommage de la chaîne d'approvisionnement

# N'importe qui peut publier un paquet nommé acme-auth. Votre build pourrait l'installer.

C'est ainsi que fonctionne la confusion de dépendances, et cela se termine par l'exécution du code d'un inconnu dans votre build. Les noms à risque sont ceux écrits dans vos propres manifestes, et SourceAnt les a déjà tous évalués.

[Commencer gratuitement](https://app.sourceant.ai/) [Explorer ce cas d'usage](https://sourceant.ai/fr/use-cases/dependency-confusion/#overview)

## Comment cela se produit

Aucun exploit et aucune astuce ingénieuse. Juste un nom que personne ne possède.

1.  01
    
    ### Ils lisent un nom
    
    Votre paquet interne s'appelle acme-auth. Ce nom figure dans un fichier de verrouillage d'un dépôt public, dans une trace de pile, dans un journal de tâche ou dans un article de blog écrit par l'un de vos ingénieurs.
    
2.  02
    
    ### Ils le publient
    
    N'importe qui peut enregistrer acme-auth sur le registre public. Cela ne coûte rien et prend une minute. Ils définissent une version supérieure à la vôtre.
    
3.  03
    
    ### Votre build prend le leur
    
    Selon la configuration de votre installateur, un paquet public peut l'emporter sur le paquet privé. Désormais, leur script d'installation s'exécute là où s'exécute votre build, avec tout ce que votre build peut atteindre.
    

Le correctif est bien connu : posséder le nom, ou épingler la source dont il doit provenir. Le plus difficile est de savoir lesquels de vos noms sont exposés, et cette liste n'est consignée nulle part.

Pourquoi SourceAnt le sait

## Il fallait décider à quel point faire confiance au nom

Lorsque SourceAnt lit un manifeste et voit une dépendance vers un nom publié par l'un de vos propres dépôts, il propose la relation. Il demande d'abord si le nom porte son propriétaire.

Un nom qui porte son propriétaire se résout vers vous et vers personne d'autre : la proposition revient donc avec une confiance totale. Un mot simple reçoit une note plus faible, car le registre public peut aussi répondre de ce mot. Ce chiffre n'est pas une précaution. C'est la forme de l'exposition.

Ainsi, la liste que vous voulez est un filtre que vous pouvez déjà exécuter.

la note, telle qu'elle s'applique

1.0

Le nom porte son propriétaire. Personne d'autre ne peut le publier.

0.6

Un mot simple. Il se résout probablement vers vous, et un inconnu pourrait s'en emparer dès demain.

aucune

Deux de vos dépôts publient le même nom. La situation est ambiguë : rien n'est donc proposé plutôt qu'un tirage au sort.

## Trois d'entre eux ne peuvent pas être détournés. Un le peut.

La plupart des écosystèmes intègrent le propriétaire dans le nom. Python ne le fait pas.

| Écosystème | Un nom qui vous appartient | Qui peut le publier |
| --- | --- | --- |
| Composer | acme/auth | Vous uniquement L'éditeur fait partie du nom. Personne d'autre ne peut le publier. |
| Go | github.com/acme/auth | Vous uniquement Le chemin du module est un hôte que vous contrôlez. |
| npm | @acme/auth | Vous uniquement Possédé lorsqu'il est précédé d'un espace de noms. Un nom simple ne l'est pas. |
| PyPI | acme-auth | N'importe qui Les noms PyPI n'ont pas de propriétaire. Il n'existe aucune forme à portée vers laquelle migrer. |

Si vos paquets internes sont en Python, ils se trouvent tous dans le second groupe. Ce n'est pas un défaut de l'inférence. C'est la nature des noms PyPI.

## Vous disposez alors d'une liste, et de deux façons de la clore

### Prenez le nom, ou empêchez le registre de répondre à sa place

Enregistrez-le publiquement pour que personne d'autre ne puisse le faire, déplacez le paquet derrière une portée que vous contrôlez, ou épinglez la source depuis laquelle votre installateur est autorisé à le résoudre.

### Consignez ceux avec lesquels vous décidez de vivre

Enregistrez-le comme contrainte avec votre raisonnement joint. La prochaine personne qui le découvre, ou le prochain agent, lit la décision au lieu de la rouvrir.

## Inscrivez votre système au registre

Exécutez le cœur open source sur votre propre infrastructure, ou commencez sur l'espace de travail hébergé. Le graphe est portable dans les deux cas.

[Commencer gratuitement](https://app.sourceant.ai/) [Fonctionnement de Systems](https://sourceant.ai/fr/systems)

[Tous les cas d'usage](https://sourceant.ai/fr/use-cases)
