From 52f3b34ffe353a1aea1b9c196fbcc1d99f2e639e Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sun, 30 Nov 2025 08:26:50 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 ++ README.md | 3 + plugin.lock.json | 45 +++++++ skills/auditing-security/SKILL.md | 214 ++++++++++++++++++++++++++++++ 4 files changed, 274 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 plugin.lock.json create mode 100644 skills/auditing-security/SKILL.md diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..9d84528 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "leapmultix-skill-auditing-security", + "description": "Skill auditing-security from LeapMultix", + "version": "1.0.0", + "author": { + "name": "Julien LE SAUX", + "email": "contact@jls42.org" + }, + "skills": [ + "./skills" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..650502d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# leapmultix-skill-auditing-security + +Skill auditing-security from LeapMultix diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..44566ff --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:jls42/leapmultix:leapmultix-marketplace/skills/auditing-security", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "a8d26e92a02c51f11d531575c5bdfdc33a9d6d6e", + "treeHash": "a97e01cec86f9cf0fd2ac8edec3bff70c5515554c2b3390b94323dcd6cc2aefd", + "generatedAt": "2025-11-28T10:19:11.097990Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "leapmultix-skill-auditing-security", + "description": "Skill auditing-security from LeapMultix", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "21f3379ee859772f802d7a1580ceca4ce173d4a49009e2be53e3e11e899213d9" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "16f83d5810b56faf1341310b58d0187fb66600a81038864876bef27a1fd54fe1" + }, + { + "path": "skills/auditing-security/SKILL.md", + "sha256": "17e064d7336d2e70988cf3ad28133cf2a96fcbd922f1e464519a89df30b997d3" + } + ], + "dirSha256": "a97e01cec86f9cf0fd2ac8edec3bff70c5515554c2b3390b94323dcd6cc2aefd" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/auditing-security/SKILL.md b/skills/auditing-security/SKILL.md new file mode 100644 index 0000000..2e0329f --- /dev/null +++ b/skills/auditing-security/SKILL.md @@ -0,0 +1,214 @@ +--- +name: auditing-security +description: Audits application security (XSS, CSP, vulnerable dependencies, CORS). Use before releases, after adding dependencies, or modifying security-utils.js +allowed-tools: Read, Grep, Glob, Bash, WebSearch +--- + +# Security Audit + +Audite la sécurité de l'application web selon standards OWASP et best practices. + +## Table des matières + +- [Quand utiliser](#quand-utiliser) +- [Domaines de sécurité](#domaines-de-sécurité) +- [Checklist sécurité](#checklist-sécurité) +- [Outils d'audit](#outils-daudit) +- [En cas de doute](#en-cas-de-doute) + +## Quand utiliser + +- Avant chaque release en production +- Après ajout/mise à jour dépendances npm +- Modifications de `security-utils.js` +- Warnings eslint-plugin-security +- Avant commit manipulant HTML dynamique +- Ajout de scripts externes (CDN, analytics) + +## Domaines de sécurité + +### 1. XSS (Cross-Site Scripting) Prevention + +**Règle absolue : Utiliser security-utils.js** + +Trouve security-utils.js pour voir fonctions disponibles : + +- `appendSanitizedHTML()` - Insérer HTML dynamique +- `createSafeElement()` - Créer élément avec contenu sécurisé +- `setSafeMessage()` - Définir texte (pas HTML) + +**Dangers :** + +- `innerHTML` avec user input → XSS +- Fonctions d'exécution dynamique avec données externes +- Event handlers depuis user input + +**Exceptions sécurisées :** + +- `innerHTML = ''` (nettoyage) +- `getTranslation()` output (contenu interne) + +### 2. Content Security Policy (CSP) + +**Principe : Meta tag CSP dans index.html** + +Examine index.html pour voir configuration CSP actuelle. + +**Baseline restrictive :** + +- `default-src 'self'` +- Pas de `'unsafe-eval'` dans script-src +- `'unsafe-inline'` limité au strict nécessaire +- `frame-ancestors 'none'` pour prévenir clickjacking + +**Scripts externes :** + +- Toujours `crossorigin="anonymous"` +- Integrity hashes pour bibliothèques statiques +- PAS d'integrity pour analytics (auto-update) +- Documenter exceptions avec commentaires + +### 3. Dependency Vulnerabilities + +**Commandes audit :** + +```bash +npm audit # Scan vulnérabilités +npm audit --json # Rapport détaillé +npm audit fix # Fix auto (patch/minor) +npm audit fix --force # Fix breaking (attention!) +``` + +**Niveaux de sévérité :** + +- **Critical/High** : Fix immédiatement avant release +- **Moderate** : Fix dans sprint suivant +- **Low** : Monitorer, fix si possible + +**Vérifier :** + +- Pas de dépendances deprecated +- Versions à jour (pas trop anciennes) +- Licences compatibles + +### 4. HTTPS et Mixed Content + +**Vérifier :** + +- HTTPS obligatoire en production +- Pas de resources HTTP (mixed content) +- Redirection HTTP → HTTPS +- HSTS header + +Examine configuration serveur ou CDN. + +### 5. Secrets et Credentials + +**Règles :** + +- **JAMAIS** committer secrets (API keys, tokens, passwords) +- **JAMAIS** stocker passwords en LocalStorage +- Utiliser variables d'environnement +- .gitignore pour fichiers sensibles (.env, credentials.json) + +**Vérifier :** + +- Pas de secrets hardcodés dans code +- .env dans .gitignore +- Terraform state pas committé + +### 6. LocalStorage Security + +**Données sensibles :** + +- **JAMAIS** tokens d'authentification +- **JAMAIS** passwords ou PII +- OK pour préférences utilisateur non sensibles + +**Vérifier :** + +- storage.js utilise localStorage correctement +- Pas de données sensibles stockées +- Données validées avant lecture + +## Checklist sécurité + +- [ ] Tous `innerHTML` utilisent `appendSanitizedHTML()` ou justifiés +- [ ] Pas de fonctions d'exécution dynamique avec données externes +- [ ] Meta tag CSP présent dans index.html +- [ ] `crossorigin="anonymous"` sur scripts externes +- [ ] `npm audit` sans Critical/High +- [ ] Pas de secrets hardcodés +- [ ] Pas de données sensibles en LocalStorage +- [ ] HTTPS en production +- [ ] Pas de mixed content +- [ ] Tests sécurité passent + +## Outils d'audit + +**ESLint Security :** + +```bash +npm run lint # Inclut eslint-plugin-security +``` + +**Dependency Scan :** + +```bash +npm audit +``` + +**Lighthouse Security Audit :** + +- Lance Chrome DevTools → Lighthouse +- Vérifie section Security +- Score doit être 100 + +**OWASP ZAP (optionnel) :** + +- Scan automatisé pour vulnérabilités web +- Tests de pénétration + +## En cas de doute + +**Source :** security-utils.js + CLAUDE.md + +**Fichiers clés :** + +1. `js/security-utils.js` - Fonctions sécurité du projet +2. `eslint.config.js` - Règles security ESLint +3. `index.html` - Configuration CSP +4. `CLAUDE.md` - Guidelines sécurité + +**Règles absolues :** + +1. TOUJOURS utiliser security-utils.js pour manipulation DOM +2. TOUJOURS audit avant release (`npm audit`) +3. JAMAIS `innerHTML` avec user input direct +4. JAMAIS stocker données sensibles en LocalStorage +5. JAMAIS scripts externes sans `crossorigin="anonymous"` + +**Workflow minimal avant commit :** + +```bash +npm run lint # ESLint security rules +npm audit # Dependency check +npm test # Security tests +``` + +**Workflow complet avant release :** + +```bash +npm run verify # Full quality gate +npm audit --audit-level=moderate # Dependency audit +# Lighthouse security audit +# Review index.html CSP config +``` + +**Red flags (arrêter immédiatement) :** + +- Fonctions d'exécution dynamique avec données externes +- `innerHTML = userInput` +- Tokens/passwords en LocalStorage +- npm audit Critical/High +- Scripts CDN sans crossorigin