Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:26:47 +08:00
commit ba28d2ddd8
53 changed files with 7766 additions and 0 deletions

View 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