Skip to main content

Soyez prudent lorsque vous travaillez avec des processus enfants

Un paragraphe d'explication

Aussi importants que soient les processus enfants, ils doivent être utilisés avec prudence. Les entrées des utilisateurs qui y sont passées doivent être assainies (NdT sanitize), voire évitées. Les dangers d'une entrée non assainie exécutant une logique au niveau du système sont illimités, allant de l'exécution de code à distance à l'exposition de données système sensibles et aussi de perte de données. Une liste de contrôle des préparatifs pourrait ressembler à ceci :

  • éviter les entrées des utilisateurs dans tous les cas, autrement les valider et les assainir
  • limiter les privilèges du parent et des processus enfants en utilisant les identités de groupe et d'utilisateur
  • exécuter votre processus dans un environnement isolé pour prévenir des effets secondaires indésirables si les autres préparations échouent

Exemple de code : Les dangers de l'exécution de processus enfants non assainis

const { exec } = require('child_process');

...

// comme exemple, prenons un script qui prend deux arguments, l'un d'entre eux est une entrée utilisateur non assainie
exec('"/path/to/test file/someScript.sh" --someOption ' + input);

// -> imaginez ce qu'il se passerait si un utilisateur entrait simplement quelque chose comme '&& rm -rf --no-preserve-root /'
// vous auriez une surprise indésirable

Ressources supplémentaires

Extrait de la documentation Node.js sur les processus enfants :

Ne jamais passer une entrée utilisateur non assainie à cette fonction. Toute entrée comportant des métacaractères du shell peut être utilisée pour déclencher une commande arbitrairement