--- title: "X-Frame-Options (header)" date: 2017-08-16T13:39:25+01:00 description: "Explications sur l'entête HTTP nommée X-Frame-Options" draft: false lastmod: 2018-10-12T02:49:25+01:00 tags: ["HTTP", "header", "X Options"] --- ## Définition **X-Frame-Options** est une entête HTTP qui permet de contrôler comment les sites internet externes peuvent "encapsuler" le vôtre. L'usage de cette entête est recommandé, d'autant qu'elle est simple à gérer et son bénéfice de sécurité est important. Cette entête remplace l'historique entête `Frame-Options`, et est elle-même remplacée par la directive `frame-ancestors` de l'entête {{< inside "web:http:csp" CSP >}} ! Elle fait partie des entêtes de base à générer pour protéger son site web, au même titre que l'usage de {{< inside "web:ssl:hsts" HSTS >}}, et des autres entêtes X-*-Options, telles que {{< inside "web:http:x-content-type-options" "X-Content-Type" >}}, {{< inside "web:http:x-xss-protections" "X-XSS-Protections" >}},… ### Options 3 options sont permises : * `DENY` : interdit aux autres de mettre votre site dans une iframe. C'est l'{{< color red >}}option recommandée{{< /color >}} ! * `SAMEORIGIN` : permet d'être mis dans une frame, à-partir de votre propre site. * `ALLOW-FROM uri` : Cette option est {{< color red >}}dépréciée{{< /color >}} - il est clairement recommandée de ne plus l'utiliser au profit de la directive `frame-ancestors` gérée par l'entête {{< inside "web:http:csp" CSP >}}. ## Exemples `X-Frame-Options: DENY` ### nginx `add_header X-Frame-Options "DENY" always;` ### relayd Et, oui, malheureusement, {{< tag httpd >}} ne peut pas gérer les entêtes, ce sera son binôme {{< man relayd 8 >}} que l'on utilisera ! `match response header set "X-Frame-Options" value "DENY"` ## Documentations * Différentes techniques de protections : https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet * Support actuel : http://caniuse.com/#search=X-Frame-Options ---