web-dev-qa-db-fra.com

Le contenu externe ne se charge pas dans iframe dans Safari

J'essaie de charger du contenu externe dans un iframe et cela fonctionne dans Chrome et Firefox, mais cela ne se chargera pas dans Safari. Dans Safari, le message d'erreur suivant s'affiche:

Refuse d'afficher 'my_content' dans un cadre car il a défini 'X-Frame-Options' sur 'sameorigin'

Je pense que le problème peut être que mon installation de WordPress se trouve dans un sous-répertoire:

L'en-tête de mon contenu externe comprend les éléments suivants:

 X-Frame-Options: sameorigin
 Content-Security-Policy: frame-ancestors 'self' https://example.com
 X-Content-Security-Policy: frame-ancestors 'self' https://example.com

Cet article répertorie un certain nombre de raisons possibles du problème rencontré avec Safari & SAMEORIGIN https://halfelf.org/2018/safari-and-sameorigin/ . Mon fichier .htaccess ne contient aucune option X-Frame supplémentaire, je me demande donc si le problème est lié à l'installation de WordPress dans un sous-répertoire. Y at-il une solution de contournement pour cela? Ou est-ce causé par autre chose?

1
megseoh

Quelqu'un avec beaucoup plus de connaissances à ce sujet l'a résolu pour moi. Je poste la réponse ici au cas où cela pourrait aider quelqu'un d'autre:

Nous avons apporté des modifications et mis en place un moyen de permettre l'affichage de [contenu externe] à l'aide des directives Content-Security-Policy, au lieu de X-Frame-Options. X-Frame-Options était jadis obsolète et était récemment dépréciée avec les directives CSP remplaçant toutes les directives X-Frame-Option, conformément à RFC 7034 .

Notez cependant que le support de Safari iFrames posait de nombreux problèmes, car il n’était pas totalement conforme aux spécifications (contrairement à ce qu’il prétend).

Après une enquête approfondie, Safari prend en charge CSF à partir de la version 10+ (la dernière est 12).

  • Cependant, la prise en charge n'est disponible que si X-Frame-Options n'est pas défini.
  • Si X-Frame-Options est défini, le CSF super-cedes, contrairement aux spécifications MDN.
  • Les navigateurs basés sur Safari et WebKit ne prennent pas en charge la directive Autoriser-de de X-Frame-Option, empêchant l’accès de sites spécifiques.
  • Et en tant que tel, ne prend pas en charge plusieurs domaines pour la liste blanche.

Nous utilisons maintenant les directives Content-Security-Policy pour dicter la liste blanche d'iFrame, sans les directives X-Frame-Option.

0
megseoh
X-Frame-Options: sameorigin

En soi (et dans les anciens navigateurs), cela empêcherait certainement l'accès. Cependant, dans les navigateurs compatibles, vous vous attendriez à ce que l'en-tête Content-Security-Policy: remplace cette valeur.

En supposant que vous maîtrisiez ce contenu externe, avez-vous essayé de définir cet en-tête sur:

 X-Frame-Options: allow-from https://example.com

Ou

 X-Frame-Options: sameorigin, allow-from https://example.com

(Bien que Safari ne supporte peut-être pas la directive allow-from.)

Ou, en supprimant complètement cet en-tête?

Je me demande si le problème est lié à l'installation de WordPress dans un sous-répertoire.

Je ne vois pas en quoi avoir installé WordPress dans un sous-répertoire aurait quelque chose à voir avec cela?

0
MrWhite