--- title: X-Frame-Options slug: Web/HTTP/Headers/X-Frame-Options tags: - HTTP - Réponse - Sécurité - en-tête translation_of: Web/HTTP/Headers/X-Frame-Options ---
L'en-tête de réponse HTTP X-Frame-Options
peut être utilisé afin d'indiquer si un navigateur devrait être autorisé à afficher une page au sein d'un élément {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("embed")}} ou {{HTMLElement("object")}}. Les sites peuvent utiliser cet en-tête afin d'éviter les attaques de {{interwiki("wikipedia", "clickjacking")}} pour s'assurer que leur contenu ne soit pas embarqués dans d'autres sites.
Ce complément de sécurité est uniquement valable lorsque l'utilisateur final visite le document avec un navigateur prenant en charge X-Frame-Options
.
Note : L'en-tête {{HTTPHeader("Content-Security-Policy")}} possède une directive frame-ancestors
qui supplante cet en-tête pour les navigateurs compatibles.
Type d'en-tête | En-tête de réponse |
---|---|
Nom d'en-tête interdit | Non |
Il existe deux directives pour X-Frame-Options
:
X-Frame-Options: deny X-Frame-Options: sameorigin
Si on utilise deny
, le chargement de la page dans une frame échouera sur un site tiers mais aussi sur un site de la même origine. En revanche, si on utilise sameorigin
, on peut toujours utiliser le document dans une frame si celle-ci partage la même origine.
deny
sameorigin
allow-from uri
(obsolète)sameorigin
: il n'y a pas de vérifications des différents ancêtres pour voir s'ils partagent la même origine. À la place, on utilisera la directive frame-ancestors
de l'en-tête {{HTTPHeader("Content-Security-Policy")}}.Note : La balise <meta>
est inutile ici ! <meta http-equiv="X-Frame-Options" content="deny">
n'aura aucun effet et mieux vaut donc ne pas l'utiliser.
On peut configurer Apache afin d'envoyer l'en-tête X-Frame-Options
pour toutes les pages. Dans la configuration, on ajoutera :
Header always set X-Frame-Options "sameorigin"
Si on veut utiliser la valeur deny
, on pourra utiliser ceci dans la configuration :
Header set X-Frame-Options "deny"
Avec NGINX, on pourra ajouter la ligne suivante à la configuration HTTP, serveur ou à la configuration de l'emplacement (location) :
add_header X-Frame-Options sameorigin always;
Pour IIS, on complètera le fichier Web.config
:
<system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="sameorigin" /> </customHeaders> </httpProtocol> ... </system.webServer>
Pour HAProxy, on ajoutera la ligne suivante à la configuration du front, du listen ou du backend :
rspadd X-Frame-Options:\ sameorigin
Dans les versions plus récentes, voici la forme équivalente :
http-response set-header X-Frame-Options sameorigin
Si on utilise Express, on pourra utiliser le module helmet qui tire parti de frameguard afin de régler cet en-tête :
const helmet = require('helmet'); const app = express(); app.use(helmet.frameguard({ action: "sameorigin" }));
On pourra également utiliser frameguard directement :
const frameguard = require('frameguard') app.use(frameguard({ action: 'sameorigin' }))
Spécification | Titre |
---|---|
{{RFC("7034")}} | HTTP Header Field X-Frame-Options |
{{Compat("http.headers.X-Frame-Options")}}
frame-ancestors
lié à la configuration de la stratégie CSP via {{HTTPHeader("Content-Security-Policy")}}