Le ver « ChainDrop » publié sur npm le 4 août au matin partait d'un hook `preinstall` sur `keyv`, `cacheable`, `flat-cache` et `file-entry-cache`, volait les jetons npm et GitHub, les clés SSH et les chaînes de connexion, puis se republiait avec ce qu'il venait de prendre — plus de 1 300 versions en une matinée. fokan n'a pas été touché, et il faut dire pourquoi : `node_modules` et le lock dataient du 29/07, six jours avant la fenêtre, et `npm ci` résout depuis le lock. Les trois paquets sont pourtant bien là, en transitif sous ESLint, chacun tiré par un `^`. Un seul `npm install` ce jour-là aurait suffi. `ignore-scripts=true` rend désormais un paquet compromis inerte tant que rien ne l'importe ; les trois qui ont réellement besoin de leur binaire sont reliés nommément par `npm rebuild` dans la CI et dans les deux étages du Dockerfile. Séparément, le `COPY . .` du builder emportait tout le répertoire de travail dans une couche de l'image : le `.env` de développement — gitignoré, donc bien présent sur le disque — devenait lisible par n'importe quel script de build, et le `node_modules` de l'hôte écrasait celui que `npm ci` venait d'installer à la ligne précédente. Un `.dockerignore` ferme les deux. Au passage, les actions GitHub sont épinglées au commit et non au tag — un tag est mutable, c'est le `^` de npm sous un autre nom — et le jeton du runner passe en lecture seule. D-047. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
26 lines
784 B
Text
26 lines
784 B
Text
# Le `COPY . .` du builder emportait tout le répertoire de travail dans une couche de l'image
|
|
# (D-047, 5 août 2026). Deux effets : le `.env` de développement — gitignoré, donc bien présent
|
|
# sur le disque — devenait lisible par n'importe quel script de build, et le `node_modules` de
|
|
# l'hôte écrasait celui que `npm ci` venait d'installer à la ligne précédente.
|
|
|
|
# Secrets — jamais dans une image, y compris l'exemple qui n'y sert à rien.
|
|
.env
|
|
.env.*
|
|
|
|
# Réinstallé dans l'image par `npm ci`, jamais copié depuis l'hôte.
|
|
node_modules
|
|
|
|
# Artefacts de build et caches locaux.
|
|
.next
|
|
dist
|
|
*.tsbuildinfo
|
|
*.log
|
|
coverage
|
|
|
|
# Sans usage à l'exécution : `docs/` n'est cité que dans des commentaires, jamais lu par le code.
|
|
.git
|
|
.github
|
|
.claude
|
|
docs
|
|
README.md
|
|
CLAUDE.md
|