Je développe une page Web qui doit afficher, dans un iframe, un rapport servi par le serveur SharePoint d'une autre entreprise. Ils sont d'accord avec ça.
La page que nous essayons de rendre dans l'iframe nous donne X-Frame-Options: SAMEORIGIN qui fait que le navigateur (au moins IE8) refuse de rendre le contenu dans un cadre.
Tout d'abord, est-ce quelque chose qu'ils peuvent contrôler ou est-ce quelque chose que SharePoint fait juste par défaut? Si je leur demande de désactiver cette fonction, pourraient-ils même le faire?
Deuxièmement, puis-je faire quelque chose pour dire au navigateur d'ignorer cet en-tête http et de simplement rendre le cadre?
Si la 2e entreprise est heureuse que vous accédiez à son contenu dans un IFrame, elle doit supprimer la restriction - elle peut le faire assez facilement dans la configuration IIS.
Il n'y a rien que vous puissiez faire pour le contourner et tout ce qui fonctionne devrait être corrigé rapidement dans un correctif de sécurité. Vous ne pouvez pas dire au navigateur de restituer simplement le cadre si l'en-tête du contenu source indique non autorisé dans les cadres. Cela faciliterait le détournement de session.
Si le contenu est GET seulement, vous ne publiez pas de données, vous pouvez obtenir le côté serveur de page et proxy le contenu sans l'en-tête, mais tout message doit être invalidé.
MISE À JOUR 2019: Vous pouvez contourner X-Frame-Options
dans un <iframe>
en utilisant mon X-Frame-Bypass Web Component. Il étend l'élément IFrame en utilisant plusieurs proxys CORS et il a été testé dans les derniers Firefox et Chrome.
Vous pouvez l'utiliser comme suit:
(Facultatif) Inclut le éléments personnalisés avec polyfill extensible intégré pour Safari:
<script src="https://unpkg.com/@ungap/custom-elements-builtin"></script>
Inclure le module JS X-Frame-Bypass:
<script type="module" src="x-frame-bypass.js"></script>
Insérez l'élément personnalisé X-Frame-Bypass:
<iframe is="x-frame-bypass" src="https://example.org/"></iframe>
L'en-tête X-Frame-Options est une fonctionnalité de sécurité appliquée au niveau du navigateur.
Si vous contrôlez votre base d'utilisateurs (service informatique pour l'application corp), vous pouvez essayer quelque chose comme un script greasemonkey (si vous pouvez a) déployer greasemonkey sur tout le monde et b) déployer votre script de manière partagée) ...
Alternativement, vous pouvez proxy leur résultat. Créez un point de terminaison sur votre serveur, et faites en sorte que ce point de terminaison ouvre une connexion au point de terminaison cible, et achemine simplement le trafic vers l'arrière.
Oui, Fiddler est une option pour moi:
CustomRules.js
).OnBeforeResponse
Ajoutez les lignes suivantes:
oSession.oResponse.headers.Remove("X-Frame-Options");
oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
Quant à la deuxième question - vous pouvez utiliser des filtres Fiddler pour définir la réponse X-Frame-Options
en-tête manuellement vers quelque chose comme ALLOW-FROM *
. Mais, bien sûr, cette astuce ne fonctionnera que pour vous - les autres utilisateurs ne pourront toujours pas voir le contenu iframe (s'ils ne font pas la même chose).