J'ai une erreur lorsque j'utilise l'option en-têtes x-frame avec Apache.
Header always append X-Frame-Options ALLOW-FROM site1,site2,site3
ou
Header always append X-Frame-Options ALLOW-FROM=site1,site2,site3
ou
Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3
Comment pourrais-je définir les options X-Frame: ALLOW-FROM pour prendre en charge plusieurs domaines?
Merci!
Header always append X-Frame-Options ALLOW-FROM=site1
Header always append X-Frame-Options ALLOW-FROM=site2
Header always append X-Frame-Options ALLOW-FROM=site3
Cette façon est OK.
Mais j'ai eu une erreur lors de ma première utilisation.
Je fais peut-être un mauvais personnage.
SetEnvIf Referer "^(https:\/\/.*\.example1\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1
SetEnvIf Referer "^(https:\/\/.*\.example2\.com)/.*" X_FRAME_OPTIONS_ALLOWED=$1
Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM %{X_FRAME_OPTIONS_ALLOWED}e" env=X_FRAME_OPTIONS_ALLOWED`
EDIT 17/01/2018: C'est ce qui est correct:
Header set X-Frame-Options SAMEORIGIN
Header append X-Frame-Options "ALLOW-FROM http://www.example.com/"
Header append X-Frame-Options "ALLOW-FROM http://example.com/"
Header append X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header append X-Frame-Options "ALLOW-FROM https://example.com/"
Donc, fondamentalement, vous n'autorisez que les iframes de votre site (SAMEORIGIN) et vous spécifiez avec un "append" une liste d'url autorisés. si vous n'ajoutez pas "ajouter", chaque ligne remplacera la précédente.
Cela fonctionne en fait avec Internet Explorer 11, ne fonctionne pas dans Firefox 57 et est ignoré par Chrome ...
tester avec https://securityheaders.io ne vous donnera pas de "A" car ils ne peuvent pas gérer plusieurs uri
We couldn't detect a valid configuration. Expected values are "DENY", "SAMEORIGIN", "ALLOW-FROM (URL)" and "ALLOWALL".
Une autre possibilité qui semble fonctionner dans IE11 et Firefox est:
Header always set X-Frame-Options "ALLOW-FROM https://www.example.fr/ https://example.fr/ http://www.example.fr/ http://example.fr/"
Il donne un "A" lorsque vous vérifiez le résultat avec https://securityheaders.io
Au fait, je me demande quel est l'intérêt d'utiliser un paramètre de sécurité que vous pouvez contourner en utilisant le navigateur le plus utilisé au monde (Chrome) ??
La spécification pour X-Frame-Options spécifie uniquement d'utiliser l'un de DENY, SAMEORIGIN et ALLOW-FROM ( https://tools.ietf.org/html/rfc7034#section-2.1 ). Certains navigateurs peuvent prendre en charge plusieurs ALLOW-FROM, mais de nombreux navigateurs ne prennent pas du tout en charge ALLOW-FROM.
Votre meilleure option est d'implémenter l'en-tête Content-Security-Policy avec la directive frame-ancestors. Cela permet de configurer plusieurs URI et est compris par la plupart des navigateurs, mais IE et Edge 14 et inférieurs).
Pour IE et la prise en charge d'Edge 14, vous pouvez également définir les options X-Frame avec ALLOW-FROM. Si vous créez une liste blanche de valeurs, vous pourrez peut-être définir l'URL ALLOW-FROM en fonction de le référent.
Cela ne fait pas de mal de définir les deux en-têtes. Les navigateurs qui comprennent les ancêtres de cadre Content-Security-Policy ignoreront les options de cadre X et ceux qui ne comprennent pas les ancêtres de cadre l'ignoreront et utiliseront les options de cadre X si disponibles. Combiner https://caniuse.com/#search=csp et https://caniuse.com/#search=x-frame-options cela fonctionnera pour tous les navigateurs sauf "Navigateur UC pour Android"
Depuis le support de ALLOW-FROM
varie dans l'implémentation et la prise en charge d'un navigateur à l'autre. J'ai essayé la solution suivante qui définit SAMEORIGIN
ou supprime conditionnellement X-Frame-Options
tout à fait.
Testé sur Apache-2.4.
# Set X-Frame-Options SAMEORIGIN _unless_ the referer is any of my allowed sites.
# Add one or more SetEnvIf - whatever suits your purpose
# This part you MUST adapt.
# ALLOW https://my.allowed.site.com
SetEnvIf Referer "^https:\/\/my\.allowed\.site\.com\/.*" X_FRAME_OPTIONS_ALLOWED
# ALLOW https://mysite.tld.com and https://yoursite.tld.com
SetEnvIf Referer "^https:\/\/(mysite|yoursite)\.tld\.com\/.*" X_FRAME_OPTIONS_ALLOWED
# ALLOW https://mysite.tld.com and https://yoursite.theother.org
SetEnvIf Referer "^https:\/\/(mysite\.tld\.com|yoursite\.theother\.org)\/.*" X_FRAME_OPTIONS_ALLOWED
# Set X-Frame-Options = SAMEORIGIN _unless_ the referer is in the allow list.
Header always set X-Frame-Options SAMEORIGIN env=!X_FRAME_OPTIONS_ALLOWED
# Always _unset_ X-Frame-Options if the referer is in the allow list.
Header always unset X-Frame-Options env=X_FRAME_OPTIONS_ALLOWED
Vous pouvez soit ajouter plusieurs SetEnvIf
ou étendre l'expression régulière - YMMV.
Vos collègues vous adoreront pour rendre les choses lisibles ...
Il convient de noter que ALLOW-FROM est supprimé de Firefox 7 , et d'autres navigateurs suivront probablement. Vous voudrez plutôt utiliser la directive frame-ancestors du CSP, qui est prise en charge dans environ 90% des navigateurs.
Votre exemple serait alors:
Header always append Content-Security-Policy "frame-ancestors site1 site2 site3;"
EDIT 17/01/2018:
Cette solution ci-dessous n'est pas correcte, car le paramètre de chaque ligne remplace la précédente. vous autorisez donc uniquement http://example.com/
Finalement, j'ai trouvé la syntaxe correcte pour cela. Selon ce site: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
Header set X-Frame-Options "ALLOW-FROM https://example.com/"
Cela a fonctionné pour moi:
Header always set X-Frame-Options "ALLOW-FROM https://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM https://example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://www.example.com/"
Header always set X-Frame-Options "ALLOW-FROM http://example.com/"