You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(Optionnel) Une clé API Groq pour la génération de correctifs IA
Installation
# 1. Cloner le projet
git clone https://github.com/Saar45/SecureScan.git
cd SecureScan
# 2. Configurer les variables d'environnement
cp .env.example .env
Éditer le fichier .env et renseigner les valeurs suivantes :
MySQL
Variable
Description
MYSQL_ROOT_PASSWORD
Mot de passe root — choisir librement (ex. rootpass)
MYSQL_DATABASE
Nom de la base — laisser security_scanner par défaut
MYSQL_USER
Nom d'utilisateur — choisir librement (ex. scanner)
MYSQL_PASSWORD
Mot de passe utilisateur — choisir librement
Ces variables configurent le conteneur Docker MySQL local. Vous pouvez choisir les valeurs que vous voulez.
Symfony
Variable
Description
APP_ENV
Laisser dev pour le développement local
APP_SECRET
Chaîne aléatoire — générer avec : openssl rand -hex 16
CORS_ALLOW_ORIGIN
Laisser http://localhost:3000 pour le développement local
GitHub OAuth (obligatoire)
Ces identifiants permettent la connexion via GitHub. Pour les obtenir :
Aller sur GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
# Lancer un scan depuis le terminal
docker compose exec backend php bin/console app:full-pipeline <repo-url> [project-name]
# Tester un scan sans intégration Git
docker compose exec backend php bin/console app:test-scan <repo-url> [name]
# Exécuter les tests
docker compose exec backend composer test# Arrêter les services
docker compose down
1. Vue d'ensemble
SecureScan est une plateforme de scan de sécurité automatisé pour dépôts Git. L'application clone un dépôt, exécute plusieurs outils d'analyse (Semgrep, TruffleHog, audits npm/composer), normalise les résultats, calcule un score global, puis peut créer une branche de correction et générer un rapport PDF.
1.1 Architecture globale
Backend : API REST Symfony 6.4 (PHP 8.1+), exposée sous /api.
Frontend : SPA React 19 (TypeScript, Vite 7) consommant l'API.
Clés primaires : UUID (CHAR(36)) pour User, Project, Scan, Finding ; Remediation a pour PK finding_id.
3.4 API REST
Toutes les routes sont préfixées par /api. Sauf /api/auth/*, l’accès nécessite un utilisateur authentifié (ROLE_USER).
Authentification — AuthController (/api/auth)
Méthode
Route
Description
GET
/github
Redirection vers GitHub OAuth.
GET
/github/callback
Callback OAuth (création/mise à jour User, session).
GET
/me
Utilisateur courant (JSON).
GET
/github/repos
Liste des dépôts GitHub de l’utilisateur.
POST
/logout
Déconnexion.
Projets — ProjectController (/api/projects)
Méthode
Route
Description
GET
``
Liste des projets de l’utilisateur connecté.
POST
``
Création d’un projet (name, repositoryUrl, etc.).
GET
/{id}
Détail d’un projet (avec scans).
Scans — ScanController (/api/scans)
Méthode
Route
Description
POST
``
Créer un scan : body repositoryUrl ou projectId.
POST
/from-archive
Créer un scan à partir d’une archive ZIP (multipart).
GET
/recent
Derniers scans (ex. 10).
GET
/{id}
Détail d’un scan (avec findings).
GET
/{id}/findings
Liste des findings (query : severity, tool, owasp).
POST
/{id}/apply-fixes
Appliquer les corrections (branche Git + PR).
GET
/{id}/report
Téléchargement du rapport PDF.
3.5 Sécurité
Provider : App\Entity\User identifié par githubId.
Firewallmain : authentification via App\Security\GitHubAuthenticator, session (non stateless).
CORS : origine autorisée via CORS_ALLOW_ORIGIN (ex. http://localhost:3000).
Contrôle d’accès : /api/auth en accès public ; tout le reste sous /api exige ROLE_USER.
Projets : rattachés à un owner (User) ; vérification d’ownership pour éviter les accès non autorisés (IDOR).
3.6 Services métier
Service
Rôle
ScanManager
Clone du dépôt, exécution des outils (Semgrep, TruffleHog, npm/composer audit), normalisation en Finding/Remediation, calcul du score, persistance du Scan.
GitIntegrationService
Application des correctifs, création de branche, push, ouverture de PR (token GitHub utilisateur).
ReportGenerator
Génération du rapport PDF à partir d’un Scan (template Twig → DomPDF).
AiFixService
Proposition de correctifs (ex. Groq) pour les findings.
TokenEncryptor
Chiffrement/déchiffrement du token GitHub pour le stockage.
3.7 Commandes CLI
Commande
Usage
app:test-scan <url> [name]
Lancer un scan depuis l’URL (et optionnellement un nom).
app:git-integration <scan-id>
Appliquer les remédiations et générer le rapport.
app:full-pipeline <repo-url> [project-name]
Pipeline complet (scan + intégration Git).
4. Frontend (React)
4.1 Stack
React 19, TypeScript 5.9, Vite 7
React Router 7, TanStack React Query 5, Axios
Recharts (graphiques), Tailwind CSS 4
4.2 Entrée et routage
Entry : frontend/src/main.tsx — BrowserRouter, QueryClientProvider, AuthProvider, puis App.
Authentification : Utilisateur → « Sign in with GitHub » → redirect OAuth → callback backend → session → GET /api/auth/me pour le frontend.
Création de scan : Frontend envoie POST /api/scans (repositoryUrl ou projectId) ou POST /api/scans/from-archive → ScanManager clone/exécute les outils → findings + score → réponse avec id du scan.
Consultation : GET /api/scans/{id} et GET /api/scans/{id}/findings pour afficher les résultats.
Correctifs : POST /api/scans/{id}/apply-fixes → GitIntegrationService (branche + PR).
Rapport : GET /api/scans/{id}/report → ReportGenerator → PDF téléchargé.
Document généré pour le projet SecureScan — documentation technique v1.