Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /**
* Utilitaires d'échappement shell — Protection contre l'injection de commandes.
*
* Chaque valeur insérée dans une commande SSH doit passer par ces fonctions.
* Ne JAMAIS concaténer directement des entrées utilisateur dans une commande shell.
*
* @module utils/shell
*/
/**
* Échappe une chaîne pour une utilisation sûre dans un argument shell simple-quoté.
* Principe : on ferme le simple quote, on insère un simple quote échappé, on réouvre.
* Exemple : "l'ami" → 'l'\''ami'
*
* @param {string} str — La chaîne à échapper
* @returns {string} — La chaîne entourée de simples quotes, sûre pour le shell
*/
function shellEscape(str) {
if (typeof str !== 'string') {
throw new TypeError('shellEscape attend une chaîne de caractères.');
}
// Remplacer chaque ' par '\'' (ferme quote, échappe, réouvre quote)
return "'" + str.replaceAll("'", String.raw`'\''`) + "'";
}
/**
* Échappe un nombre pour l'utiliser dans une commande shell.
* Vérifie que c'est bien un entier positif (ex : nombre de lignes, port).
*
* @param {number|string} n — Le nombre à valider
* @param {number} [min=0] — Valeur minimum acceptée
* @param {number} [max=Infinity] — Valeur maximum acceptée
* @returns {number} — Le nombre validé
* @throws {Error} Si la valeur n'est pas un entier dans la plage
*/
function shellInt(n, min = 0, max = Infinity) {
const parsed = Number.parseInt(n, 10);
if (!Number.isFinite(parsed) || parsed < min || parsed > max) {
throw new Error(`Valeur numérique invalide : ${n} (attendu ${min}-${max}).`);
}
return parsed;
}
module.exports = { shellEscape, shellInt };
|