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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | /** * Analyseur de commandes — Détecte les commandes dangereuses. * * Utilisé pour : * - Avertir l'utilisateur avant exécution via le chat Claude * - Forcer la confirmation dans l'interface * - Logger les commandes sensibles * * Niveaux de dangerosité : * - 'safe' → Exécution directe autorisée * - 'write' → Modifie des fichiers (avertissement) * - 'dangerous' → Potentiellement destructif (confirmation obligatoire) * * @module services/commandAnalyzer */ // ─── Patterns qui nécessitent une confirmation obligatoire ─────────────────── // Ces commandes peuvent causer des pertes de données irréversibles. const DANGEROUS_PATTERNS = [ { pattern: /\brm\b.*(-rf?|-fr?)/i, desc: 'Suppression récursive/forcée (rm -rf)' }, { pattern: /\brm\b\s+(-f|--force)/i, desc: 'Suppression forcée (rm -f)' }, { pattern: /\bdocker\s+(stop|kill|rm|rmi|prune)/i, desc: 'Action destructive Docker' }, { pattern: /\bsystemctl\s+(stop|disable|mask|kill)/i, desc: 'Arrêt de service systemd' }, { pattern: /\bservice\s+\S+\s+stop/i, desc: 'Arrêt de service (SysV)' }, { pattern: /\bkill\b/i, desc: 'Terminaison de processus (kill)' }, { pattern: /\bpkill\b/i, desc: 'Terminaison de processus par nom (pkill)' }, { pattern: /\bshutdown\b/i, desc: 'Arrêt du système' }, { pattern: /\breboot\b/i, desc: 'Redémarrage du système' }, { pattern: /\bpoweroff\b/i, desc: 'Extinction du système' }, { pattern: /\bformat\b/i, desc: 'Formatage' }, { pattern: /\bdd\b.*of=/i, desc: 'Écriture disque raw (dd)' }, { pattern: /\bmkfs\b/i, desc: 'Création de système de fichiers' }, { pattern: /\bfdisk\b/i, desc: 'Modification de table de partitions' }, { pattern: /\bdrop\s+table/i, desc: 'Suppression de table SQL (DROP TABLE)' }, { pattern: /\btruncate\b/i, desc: 'Vidage de table SQL (TRUNCATE)' }, { pattern: /\b>\s*\/dev\//i, desc: 'Écriture raw device (/dev/)' }, { pattern: /\bchmod\s+777/i, desc: 'Permissions ouvertes (chmod 777)' }, { pattern: /\bchmod\s+-R\s+777/i, desc: 'Permissions ouvertes récursives' }, { pattern: /\bcrontab\s+-r/i, desc: 'Suppression de crontab' }, { pattern: /\biptables\s+-F/i, desc: 'Flush des règles firewall' }, ]; // ─── Patterns de modification de fichiers (avertissement) ──────────────────── // Ces commandes modifient le système de fichiers sans être destructives. const WRITE_PATTERNS = [ { pattern: /\btee\b/, desc: 'Écriture via tee' }, { pattern: /\bsed\s+-i/, desc: 'Édition en place (sed -i)' }, { pattern: />\s*[^>]/, desc: 'Redirection écriture' }, { pattern: /\becho\b.*>\s*/, desc: 'Écriture via echo' }, { pattern: /\bcat\b.*>\s*/, desc: 'Écriture via cat' }, { pattern: /\bprintf\b.*>\s*/, desc: 'Écriture via printf' }, { pattern: /\bcp\b/, desc: 'Copie de fichier' }, { pattern: /\bmv\b/, desc: 'Déplacement de fichier' }, { pattern: /\bmkdir\b/, desc: 'Création de répertoire' }, { pattern: /\btouch\b/, desc: 'Création de fichier vide' }, { pattern: /\bchown\b/, desc: 'Changement de propriétaire' }, { pattern: /\bchmod\b/, desc: 'Changement de permissions' }, ]; /** * Analyse une commande bash et retourne son niveau de dangerosité. * * @param {string} command — La commande à analyser * @returns {{ level: 'safe' | 'write' | 'dangerous', reason?: string }} */ function analyzeCommand(command) { // Vérifier d'abord les patterns dangereux for (const { pattern, desc } of DANGEROUS_PATTERNS) { if (pattern.test(command)) { return { level: 'dangerous', reason: `Commande potentiellement destructive : ${desc}`, }; } } // Vérifier les patterns d'écriture for (const { pattern, desc } of WRITE_PATTERNS) { if (pattern.test(command)) { return { level: 'write', reason: `Commande de modification : ${desc}`, }; } } return { level: 'safe' }; } module.exports = { analyzeCommand }; |