Détail — sécurité
Comment ce site est sécurisé
Ce portfolio fait tourner un assistant IA en direct, dont chaque réponse coûte de l’argent réel : il est donc construit comme un petit service de production. Voici ce qui le protège, en termes simples — et ce qui ne le protège pas encore.
Limites de dépenses de l’assistant IA
Chaque visiteur peut poser jusqu’à 8 questions toutes les 10 minutes, et l’ensemble du site est plafonné à 200 réponses par jour. Les deux compteurs sont stockés dans Upstash Redis, ils valent donc pour toutes les instances du serveur. Si le limiteur ne répond pas, l’assistant refuse de répondre au lieu de laisser passer les requêtes. Derrière, un plafond de dépenses mensuel s’applique à un espace de travail Anthropic dédié.
Entrées plafonnées et vérifiées d’abord
Les requêtes de plus de 16 Ko sont rejetées, chaque message est coupé à 800 caractères, seuls les 8 derniers échanges sont conservés et chaque appel au modèle est plafonné à 1 500 jetons. Les requêtes mal formées sont refusées avant d’atteindre une limite ou le modèle.
Seul ce site peut appeler l’assistant
Le point d’accès de l’assistant n’accepte que les requêtes de navigateur venant de simonlaborde.com. Tout autre site reçoit une erreur 403 et aucune autorisation de lire la réponse.
Tests d’injection de prompt
Les tests tentent de contourner les instructions, d’extraire le prompt système, de changer la persona de l’assistant, de glisser des instructions dans un texte collé, de lui faire révéler des informations privées et de le pousser à donner un prix ou un délai ; une deuxième série vérifie que chaque réponse sur mon expérience correspond à mon profil, jugée par un autre modèle d’IA, et une troisième tente de convaincre le vérificateur de réponses d’approuver de fausses affirmations. La dernière exécution complète sur le site en ligne a réussi tous les tests, le 1 novembre 2026. L’assistant n’a pas d’outils, n’exécute aucune action et ne voit que le contenu public de ce site ; ses réponses s’affichent en texte brut, jamais en HTML.
Chaque réponse est vérifiée avant de vous parvenir
Avant l’envoi d’une réponse, un second appel d’IA vérifie chacune de ses affirmations par rapport à mon profil. Si quelque chose n’est pas étayé, la réponse est réécrite une fois ; si elle ne passe toujours pas — ou si la vérification elle-même échoue —, vous recevez une courte note avec mon e-mail au lieu d’une réponse non vérifiée.
Vos questions et votre vie privée
Les questions sont envoyées à l’API Claude d’Anthropic pour générer la réponse et la vérifier. Ce site n’enregistre pas les conversations, et votre adresse IP est conservée jusqu’à 10 minutes pour limiter l’usage. Pas de cookies, pas d’outils d’analyse.
Le formulaire de contact
Une fois activé, le formulaire de contact de la page destinée aux entreprises (en anglais et en portugais) transmettra les demandes à ma boîte mail via Resend, un service d’envoi d’e-mails basé aux États-Unis ; d’ici là, l’envoi affiche mon adresse e-mail. Ce site n’enregistre et ne journalise rien de ce qui est envoyé. Chaque champ est vérifié sur le serveur, le formulaire n’accepte que les requêtes venant de ce site, un champ piège caché arrête les robots simples, et des limites de 3 messages par heure par connexion et de 20 par jour empêchent les envois en masse — si le limiteur ne répond pas, le formulaire refuse d’envoyer.
En-têtes de sécurité
Une Content Security Policy qui n’autorise que les scripts, styles, polices et connexions du site lui-même ; HTTPS imposé avec HSTS ; pas de MIME sniffing ; une politique de referrer stricte ; caméra, micro, géolocalisation et paiements désactivés ; et aucun autre site ne peut intégrer ces pages dans un cadre.
Aucune requête vers un tiers avant que vous lanciez une vidéo
Visiter le site ne contacte aucun tiers : les polices et les affiches des vidéos sont servies par le site lui-même, et la Content Security Policy le garantit. Les deux vidéos de projets se chargent depuis YouTube, en mode de confidentialité renforcée (youtube-nocookie.com), seulement quand vous appuyez sur lecture.
Chaque modification passe les mêmes contrôles
Chaque modification est une pull request qui doit passer un lint, un build de production, un smoke test dans le navigateur, un audit des dépendances, une recherche de secrets sur tout l’historique git (gitleaks) et une analyse statique CodeQL. La branche principale est protégée sans exception pour les administrateurs — même le propriétaire ne peut pas y pousser directement. Dependabot propose les mises à jour, et les actions de CI sont fixées sur des hashes de commit exacts. L’audit qui a mis tout cela en place a aussi détecté une vulnérabilité critique de Next.js dans la version déployée (GHSA-vcvr-r3jv-pc5j), corrigée le jour même.
Données personnelles
Le CV public est généré sans numéro de téléphone — le générateur refuse de le produire sinon — et l’historique git a été réécrit pour retirer le numéro de tous les anciens commits.
Limites connues
- La Content Security Policy autorise encore les scripts inline (‘unsafe-inline’). Les pages Next.js rendues statiquement en ont besoin ; les retirer obligerait à rendre chaque page à la demande.
- Les limites sont par adresse IP : quelqu’un disposant de nombreuses adresses pourrait répartir ses requêtes. Le plafond quotidien et la limite de dépenses bornent le coût.
- Les réponses de l’IA peuvent encore exagérer. L’assistant s’appuie uniquement sur le contenu de ce site et a pour consigne de ne pas enjoliver — vérifiez tout point important directement auprès de moi.
- Le CDN de Vercel marque les fichiers statiques publics comme lisibles par n’importe quel site (Access-Control-Allow-Origin: *). C’est sans conséquence pour du contenu public ; le point d’accès de l’assistant utilise sa propre liste d’origines autorisées.
- Le formulaire de contact n’a pas de CAPTCHA, qui demanderait un script tiers. Son champ piège n’arrête que les robots simples ; les limites horaires et quotidiennes bornent le reste.
Signaler une vulnérabilité
Vous avez trouvé un problème ? Écrivez à simonrl865@gmail.com — l’adresse figure aussi dans /.well-known/security.txt. Merci de ne pas ouvrir d’issue publique pour un problème de sécurité.
Modèle de menaces complet : SECURITY.md sur GitHub (en anglais) ↗