¿Cómo puedo omitir las opciones de X-Frame: SAMEORIGIN HTTP Header?

Estoy desarrollando una página web que necesita mostrar, en un iframe, un informe servido por el servidor de SharePoint de otra compañía. Están bien con esto.

La página que estamos tratando de representar en el iframe nos está dando X-Frame-Options: SAMEORIGIN que hace que el navegador (al menos IE8) se niegue a procesar el contenido en un marco.

Primero, ¿esto es algo que pueden controlar o es algo que SharePoint simplemente hace por defecto? Si les pido que apaguen esto, ¿podrían hacerlo?

En segundo lugar, ¿puedo hacer algo para decirle al navegador que ignore este encabezado http y simplemente renderice el marco?

Si la segunda compañía está contenta de que acceda a su contenido en un IFrame, entonces deben eliminar la restricción, ya que pueden hacerlo fácilmente en la configuración de IIS.

No hay nada que pueda hacer para eludirlo y todo lo que funcione debería ser parcheado rápidamente en una revisión de seguridad. No puede decirle al navegador que solo represente el fotogtwig si el encabezado del contenido de la fuente dice que no está permitido en los fotogtwigs. Eso facilitaría el secuestro de la sesión.

Si el contenido es OBTENER únicamente y no publica datos, entonces podría obtener el lado del servidor de la página y el contenido sin el encabezado, pero luego cualquier publicación posterior debería quedar invalidada.

Puede omitir X-Frame-Options en un usando YQL. Aquí hay una prueba de concepto, probado en Chrome y Firefox: Hacker News en un .

El proceso es el siguiente:

  1. Solicite una URL iframe de YQL (función loadURL ),
  2. Obtenga una información HTML de YQL (función getData ),
  3. Agregue un y un cargando enlaces en un iframe usando YQL también,
  4. Inyecte este HTML en un vacío (función loadHTML ).

El código JS de muestra:

 var iframe = document.getElementsByTagName('iframe')[0]; var url = iframe.src; var getData = function (data) { if (data && data.query && data.query.results && data.query.results.resources && data.query.results.resources.content && data.query.results.resources.status == 200) loadHTML(data.query.results.resources.content); else if (data && data.error && data.error.description) loadHTML(data.error.description); else loadHTML('Error: Cannot load ' + url); }; var loadURL = function (src) { url = src; var script = document.createElement('script'); script.src = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.headers%20where%20url%3D%22' + encodeURIComponent(url) + '%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=getData'; document.body.appendChild(script); }; var loadHTML = function (html) { iframe.src = 'about:blank'; iframe.contentWindow.document.open(); iframe.contentWindow.document.write(html.replace(//i, 'document.addEventListener("click", function(e) { if(e.target && e.target.nodeName == "A") { e.preventDefault(); parent.loadURL(e.target.href); } });')); iframe.contentWindow.document.close(); } loadURL(iframe.src); 

El encabezado X-Frame-Options es una característica de seguridad aplicada en el nivel del navegador.

Si tiene control sobre su base de usuarios (departamento de TI para la aplicación corp), podría intentar algo como un script de greasemonkey (si es posible) a) implementar greasemonkey en todos yb) implementar su script de forma compartida) …

Alternativamente, puede proxy su resultado. Cree un punto final en su servidor y haga que ese punto final abra una conexión con el punto final objective y simplemente canalice el tráfico hacia atrás.

En cuanto a la segunda pregunta, puede usar los filtros Fiddler para establecer manualmente el encabezado X-Frame-Options en ALLOW-FROM * . Pero, por supuesto, este truco funcionará solo para ti: otros usuarios aún no podrán ver el contenido del iframe (si no hacen lo mismo).

Sí Fiddler es una opción para mí:

  1. Abre el menú Fiddler> Reglas> Personaliza reglas (esto edita CustomRules.js ).
  2. Encuentre la función OnBeforeResponse
  3. Agregue las siguientes líneas:

     oSession.oResponse.headers.Remove("X-Frame-Options"); oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*"); 
  4. ¡Recuerde guardar el script!