CentralCSP
PolitiquesContent-Security-PolicyDirectives

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-src

Une 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' :

ValeurStatutDescription
'none'✅ BonBloque toutes les frames et iframes.
'self'✅ BonFrames provenant uniquement de l'origine de la page.
https://embed.example✅ BonFrames 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.com

Cette 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

Sources

On this page