frame-src
La directive CSP frame-src contrôle les sources chargées dans les éléments frame et iframe. Valeurs, repli et exemples.
Dernière mise à jour:
La directive frame-src de la politique de sécurité du contenu (CSP) contrôle
les sources qu'une page est autorisée à charger dans les éléments <frame> et
<iframe>. Si une frame pointe vers une URL que la directive n'autorise pas, le
navigateur refuse de la charger et envoie un report de violation.
Une politique minimale sûre pour cette directive, quand la page n'intègre rien :
Content-Security-Policy: frame-src 'none'Chaîne de repli
frame-src ne fonctionne pas seule. Quand elle est absente, le navigateur
retombe sur child-src,
et quand celle-ci est absente aussi, sur default-src :
frame-src -> child-src -> default-srcUne politique avec seulement default-src 'self' restreint donc déjà les frames
à la même origine. Définissez frame-src quand vous voulez que les sources de
frames diffèrent du reste de votre politique.
Valeurs
frame-src prend une liste de sources, la même grammaire que les autres
directives fetch : sources d'hôte,
sources de schéma,
et les mots-clés 'self' ou 'none' :
| Valeur | Statut | Description |
|---|---|---|
'none' | ✅ Bon | Bloque toutes les frames et iframes. |
'self' | ✅ Bon | Frames provenant uniquement de l'origine de la page. |
https://embed.example | ✅ Bon | Frames provenant d'un hôte précis que vous intégrez. |
https: | ❌ Risqué | Laisse n'importe quelle page HTTPS être intégrée, y compris du contenu de phishing. |
data: | ❌ Risqué | Une frame data: injectée est un contenu entièrement contrôlé par l'attaquant. |
* | ❌ Risqué | Frames depuis n'importe où. Ne correspond jamais à data: ni blob:. |
Les nonces et les hashes ne s'appliquent pas à frame-src ; les documents
intégrés sont vérifiés par leur URL, pas par une empreinte inline.
Exemples
Content-Security-Policy: frame-src 'self' https://www.youtube.comCette page n'intègre des frames que depuis sa propre origine et depuis
www.youtube.com. Une frame pointant ailleurs est bloquée.
Notes de sécurité
Restreindre les sources de frames limite la provenance du contenu intégré, ce
qui réduit la surface pour les frames tierces malveillantes ou inattendues, la
redirection de clics dans une iframe et le contenu de phishing intégré. Elle se
combine avec frame-ancestors (qui vous intègre) et connect-src
(où votre page communique) dans une politique en couches.
frame-src n'est pas frame-ancestors. Ces deux directives se ressemblent et
pointent dans des directions opposées. frame-src contrôle les pages que vous
intégrez (ce que votre page peut mettre dans une iframe).
frame-ancestors
contrôle qui peut vous intégrer (quelles pages parentes peuvent mettre votre
page en frame), et c'est le contrôle anti-clickjacking moderne qui remplace
X-Frame-Options. Elles ne se substituent pas l'une à l'autre, une page définit
souvent les deux.
Contournements et risques connus
frame-src régit l'URL du document de la frame, pas ce qui s'exécute dans une
frame autorisée. Une fois la frame autorisée, sa propre CSP (ou son absence)
régit son contenu, donc autoriser un hôte large comme https: laisse n'importe
quelle page HTTPS être intégrée. Une URL de frame javascript: ou data: est
vérifiée comme source de schéma, donc n'ajoutez pas ces schémas sauf si vous
voulez vraiment les autoriser.
Recommandation
Content-Security-Policy: frame-src 'none'Bloquez complètement les frames sauf si vous intégrez du contenu tiers. Si vous
intégrez, listez les hôtes exacts (par exemple frame-src 'self' https://www.youtube.com)
plutôt qu'un schéma large, pour qu'une iframe injectée ne puisse pas charger des
pages arbitraires.
Reporting
Quand une frame est bloquée, le navigateur envoie un report csp-violation
avec frame-src comme effectiveDirective, incluant l'URL bloquée. CentralCSP
collecte et agrège ces reports, donc vous pouvez voir chaque hôte que vos pages
intègrent avant de resserrer la directive.
Prise en charge par les navigateurs
Largement prise en charge par les navigateurs actuels dans le cadre de CSP
niveau 3. Le repli vers
child-src
est également largement pris en charge, donc omettre frame-src laisse quand
même les frames régies par child-src ou default-src.
Voir aussi
- child-src, le repli pour les sources de frames et de workers
- frame-ancestors, qui contrôle qui peut intégrer votre page
- Évaluer une politique avec l'évaluateur CSP