Initial commit
This commit is contained in:
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