Ce site est aussi
une pièce du portfolio.
Un portfolio de sécurité doit appliquer ce qu’il défend. Chaque choix ci-dessous est imposé par le build ou la configuration d’hébergement, pas par de bonnes intentions. Vérifiable en une commande.
Contrôles en place
- Content-Security-PolicyStricte, sans unsafe-inline ni unsafe-evalHTTP
- Strict-Transport-Security2 ans, sous-domaines, preloadHTTP
- X-Frame-Options + frame-ancestorsDENY : le site ne peut pas être encadréHTTP
- X-Content-Type-OptionsnosniffHTTP
- Referrer-Policystrict-origin-when-cross-originHTTP
- Permissions-Policycaméra, micro, géolocalisation désactivésHTTP
- Cross-Origin-Opener-Policysame-originHTTP
- Requêtes tierces0 : polices hébergées sur le site, pas de CDN, pas d’intégrationsPage
- Cookies et traceurs0 : pas d’analytics, pas besoin de bandeau de consentementVie privée
- Surface d’attaque serveurAucune : HTML statique, pas de backend, pas de base, pas de formulaireArchitecture
- security.txtPublié sur /.well-known/security.txt (RFC 9116)Divulgation
- Vulnérabilités connues0 signalée par npm auditSupply chain
- Dépendances8 paquets directs, tous utilisés au buildSupply chain
La politique réelle
Lue au moment du build depuis le même vercel.json que celui appliqué par l’hébergeur : cette page ne peut pas diverger de la production.
default-src 'self';
script-src 'self';
style-src 'self';
img-src 'self' data:;
font-src 'self';
connect-src 'self';
object-src 'none';
base-uri 'self';
form-action 'self';
frame-ancestors 'none';
upgrade-insecure-requestsChoix de conception
Aucun code inline, nulle part
Tout le JavaScript est regroupé dans un seul fichier externe. Les extraits de code sont colorés au build avec des classes CSS plutôt que des styles inline. Les valeurs dynamiques (l’effet de lumière sur les cartes) passent par le CSSOM, autorisé par la CSP. Résultat : script-src et style-src restent à self.
Statique par conception
Rien à attaquer côté serveur, car il n’y a pas de logique serveur : chaque page est du HTML pré-généré. Le contact passe par mailto, donc aucun endpoint de formulaire à spammer ou à injecter.
Rien de tiers
Les polices sont livrées avec le site, sans analytics, sans widgets sociaux ni scripts CDN. Les visiteurs ne sont pas suivis, et un tiers compromis ne peut pas injecter de code ici.
Hygiène de la supply chain
Un arbre de dépendances réduit, un lockfile versionné et npm audit maintenu à 0. Astro a été mis à jour de deux versions majeures pour éliminer une alerte critique avant qu’elle ne compte.
Essayez de me pirater
Collez une charge XSS, ou choisissez-en une ci-dessous, puis injectez-la. Cette page l’insère vraiment dans le DOM, avec une méthode qui exécuterait les scripts. La seule barrière est la Content-Security-Policy, et le journal montre le navigateur bloquer chaque tentative en temps réel.
Vérifiez vous-même
Les en-têtes sont publics. Ces commandes et scanners montrent exactement ce que reçoit le navigateur.
$ curl -sI https://mouaadsek.dev | grep -iE "content-security|strict-transport|x-frame|referrer|permissions"Limites connues
- Le site a son propre domaine, mouaadsek.dev, mais le DNS et le TLS dépendent toujours du registrar et de l’hébergeur (Name.com et Vercel).
- Mon adresse email est publiée volontairement : être joignable est le but d’un portfolio.
- Les navigateurs imposent déjà HTTPS pour tout domaine .dev (le TLD entier est préchargé), mais mouaadsek.dev n’est pas encore soumis seul à la liste de preload HSTS.