Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# leapmultix-skill-auditing-security
|
||||||
|
|
||||||
|
Skill auditing-security from LeapMultix
|
||||||
45
plugin.lock.json
Normal file
45
plugin.lock.json
Normal file
@@ -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": []
|
||||||
|
}
|
||||||
|
}
|
||||||
214
skills/auditing-security/SKILL.md
Normal file
214
skills/auditing-security/SKILL.md
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user