Guides

Résumé exécutif par IA

La section « résumé exécutif » du rapport peut être rédigée par un LLM plutôt que par le paragraphe statique par défaut. Définissez au moins une de ces clés :

OPENROUTER_API_KEY=...          # votre clé OpenRouter — essayée en premier
OPENROUTER_API_KEY_1=...        # clé de repli 1 (optionnel)
OPENROUTER_API_KEY_2=...        # clé de repli 2 (optionnel)
VERCEL_AI_GATEWAY_API_KEY=...   # service de repli (optionnel)

Deux façons de les définir, au choix :

  • ~/.cyberlens/config.env — un emplacement fixe, identique quel que soit le répertoire depuis lequel vous lancez cyberlens ou le paquet utilisé pour l'installer (deb/exe/dmg/snap/pip). Créez ce fichier vous-même avec les lignes ci-dessus : c'est l'emplacement recommandé pour une CLI installée globalement.
  • Un fichier .env dans le répertoire courant — pratique en développement, mais uniquement pris en compte si vous lancez cyberlens depuis ce même répertoire.

Ne committez jamais de vraies clés. Une véritable variable d'environnement (export OPENROUTER_API_KEY=...) reste toujours prioritaire sur les deux fichiers.

Chaque clé OpenRouter configurée est essayée sur trois modèles gratuits avant de passer à la clé suivante puis à Vercel AI Gateway. Si toutes les tentatives échouent (ou qu'aucune clé n'est définie), le rapport retombe sur le résumé statique déterministe — un scan n'échoue jamais à cause de ça. Désactivez entièrement cette fonctionnalité avec --no-ai-summary si vous préférez ne pas envoyer les titres de constats à une API tierce.

Guides

Langue du rapport

--language en (défaut) ou --language fr traduit la structure du rapport : page de couverture, titres de section, tableau de méthodologie, résumé statique, en-têtes de tableau, en-tête/pied de page courants. Quand le résumé IA est actif (par défaut), il est aussi généré directement dans la langue choisie, et chaque champ traduisible de chaque constat et contrôle passé est également traduit en un seul appel LLM groupé — les champs techniques bruts (preuve, endpoint, vecteur CVSS, CWE) restent volontairement intacts.

Si aucun fournisseur IA n'est configuré, ou que toutes les tentatives échouent, le texte des constats reste dans sa langue d'origine (anglais) — le rapport se génère quand même, juste sans traduction des constats pour cette exécution.

Guides

Scan authentifié

Certaines pages n'affichent leur véritable contenu (souvent avec leur propre formulaire) qu'à un utilisateur connecté — un visiteur anonyme voit à la place une porte de connexion, et un scan qui ne se connecte pas rapporterait les champs du formulaire de connexion comme s'ils appartenaient à cette page.

--auth-username (avec le mot de passe via CYBERLENS_AUTH_PASSWORD ou une invite interactive masquée) fait en sorte que CyberLens se connecte une fois, juste après le crawl initial — en remplissant et en cliquant réellement sur un vrai formulaire de connexion dans un navigateur, pas en devinant une requête HTTP. En cas de succès, le site est re-parcouru en mode authentifié, et la session résultante est partagée par tout ce qui s'exécute ensuite :

  • Les scanners basés sur httpx (jwt, secrets, sqli, ssti, …) en bénéficient automatiquement — les mêmes cookies de session et/ou jeton bearer (détecté automatiquement selon ce que le site utilise réellement) sont posés directement sur le client HTTP partagé.
  • Chaque scanner qui ouvre son propre navigateur (re-crawl, storage, clickjacking, xss) applique les mêmes cookies et rejoue le localStorage capturé dans chaque nouveau contexte navigateur, car une session JWT-en-localStorage (fréquente sur les SPA avec backend API séparé) ne survit pas naturellement dans un contexte tout neuf.

Un échec de connexion (mauvais identifiants, aucun formulaire de connexion trouvé, CAPTCHA, …) n'est pas bloquant : le scan continue en mode anonyme, exactement comme si --auth-username n'avait jamais été passé.

Nouveau. Le scan authentifié alimente aussi le module idor, qui teste le contrôle d'accès défaillant (IDOR) sur les endpoints API à identifiant numérique observés pendant le crawl.

Guides

Déboguer « pourquoi aucun formulaire/lien trouvé »

cyberlens inspect <url> restitue une URL exactement comme le fait le crawler (Chromium headless, même stratégie d'attente) et enregistre le HTML résultant + une capture d'écran pleine page, plus un résumé rapide (nombre de champs/formulaires, présence d'un shadow root ouvert). Utile aussi pour repérer une détection de bot qui sert un contenu différent à un navigateur automatisé qu'à un humain.

cyberlens inspect https://example.com/login --output-dir ./debug

Guides

Scanner un projet local

cyberlens scan-local exécute un ensemble de contrôles distinct directement sur l'arborescence source d'un projet, sur disque — aucune URL cible, aucun trafic réseau vers le projet lui-même :

cyberlens scan-local ./mon-projet --output report.pdf
cyberlens scan-local ./mon-projet --modules local_secrets,env_exposure --format json -o report.json

Voir le tableau des modules locaux. Il n'y a pas de garde-fou d'autorisation pour scan-local, puisque scanner ses propres fichiers locaux ne porte aucun des risques que scan encadre.