Ce dossier contient les scripts utilitaires pour la validation, la sécurité et la maintenance du projet Focusly.
Description: Scanne le code source pour détecter les problèmes de sécurité potentiels.
Usage:
npm run test:security
# ou
node scripts/security-check.jsCe qu'il vérifie:
- ✅ Exposition de
SUPABASE_SERVICE_ROLE_KEYdans le code client - ✅ Tokens stockés dans
localStorage(vulnérabilité XSS) - ✅ Création directe de clients Supabase avec SERVICE_ROLE hors API routes
- ✅ Mots de passe hardcodés dans le code
- ✅ Clés API hardcodées
- ✅ Problèmes potentiels dans les policies RLS
Niveaux de sévérité:
- 🚨 CRITICAL: Bloque le CI/CD, doit être corrigé immédiatement
⚠️ HIGH: Warning, devrait être corrigé- 💡 MEDIUM: Suggestion d'amélioration
Exemple de sortie:
🚨 CRITICAL SECURITY ISSUES:
src/components/TaskManager.tsx:42
🚨 SERVICE_ROLE_KEY found in client-accessible file
Code: const client = createClient(url, process.env.SUPABASE_SERVICE_ROLE_KEY)
📊 SUMMARY:
Critical: 1
High: 0
Medium: 0
Total: 1
❌ Security check FAILED - Critical issues found!
Description: Valide que toutes les variables d'environnement requises sont correctement configurées.
Usage:
npm run check:env
# ou
node scripts/check-env.jsCe qu'il vérifie:
- ✅ Présence de toutes les variables requises
- ✅ Détection de valeurs placeholder (ex: "your-key-here")
- ✅ Préfixes corrects (
NEXT_PUBLIC_pour variables publiques) - ✅ Longueur minimale pour les secrets
- ✅ Cohérence entre
.envet.env.local
Variables vérifiées:
Requises:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYNEXTAUTH_SECRETNEXTAUTH_URL
Optionnelles:
NODE_ENVNEXT_PUBLIC_APP_URL
Exemple de sortie:
🔍 Checking environment variables for Focusly...
📁 Environment files checked:
.env: ✅
.env.local: ✅
🔒 REQUIRED VARIABLES:
✅ NEXT_PUBLIC_SUPABASE_URL
✅ NEXT_PUBLIC_SUPABASE_ANON_KEY
❌ SUPABASE_SERVICE_ROLE_KEY
❌ ISSUES FOUND:
❌ ERRORS:
SUPABASE_SERVICE_ROLE_KEY: SUPABASE_SERVICE_ROLE_KEY is not set
Description: Supabase service role key (NEVER expose to client)
Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
📊 SUMMARY:
Critical: 0
Errors: 1
Warnings: 0
❌ Environment validation FAILED!
💡 TIP: Copy .env.example to .env.local and fill in your values
# Avant de committer
npm run validate
# Cela exécute:
# - npm run lint
# - npm run type-check
# - npm run test:security
# - npm run check:envAjouter à .github/workflows/ci.yml:
name: CI
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Run validation
run: npm run validate
env:
# Définir les variables d'env pour le check
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }}
NEXTAUTH_URL: ${{ secrets.NEXTAUTH_URL }}Ajouter à .husky/pre-commit:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# Exécuter les vérifications de sécurité
npm run test:security || exit 1
# Vérifier les types
npm run type-check || exit 1Éditer scripts/security-check.js:
const DANGEROUS_PATTERNS = [
// ... patterns existants
{
pattern: /votre-pattern-regex/,
exclude: ['dossiers', 'à', 'exclure'],
message: 'Votre message d\'erreur',
severity: 'CRITICAL' // ou 'HIGH', 'MEDIUM', 'LOW'
}
];Éditer scripts/check-env.js:
const REQUIRED_ENV_VARS = {
// ... variables existantes
'VOTRE_VARIABLE': {
description: 'Description de la variable',
example: 'Exemple de valeur',
public: false, // true si NEXT_PUBLIC_
critical: true // true si critique pour la sécurité
}
};Problème: Aucune erreur n'est détectée même avec des problèmes évidents.
Solutions:
- Vérifier que vous êtes dans le dossier racine du projet
- Vérifier que
src/existe - Augmenter la verbosité en modifiant le script
Problème: Variables non détectées même si elles sont dans .env.local.
Solutions:
- Vérifier le format du fichier
.env.local(pas d'espaces avant=) - Vérifier les guillemets (supprimer si présents)
- Redémarrer le terminal
Problème: Permission denied lors de l'exécution.
Solution:
chmod +x scripts/*.js- Les scripts sont écrits en JavaScript vanilla (pas de dépendances) pour une exécution rapide
- Ils peuvent être exécutés directement avec Node.js sans build
- Les chemins sont relatifs au dossier racine du projet
- Les scripts retournent des exit codes appropriés pour CI/CD :
0= succès1= échec
Si vous rencontrez des problèmes avec les scripts :
- Vérifier les logs de sortie
- Exécuter avec Node.js en mode verbose :
node --trace-warnings scripts/security-check.js - Consulter ce README
- Vérifier que Node.js ≥ 18 est installé
Dernière mise à jour: 28 novembre 2024