the sameorigin name found always allow all asp.net sharepoint http x-frame-options

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



x-frame-options php (5)

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?


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 objetivo 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í

En la función OnBeforeResponse de CustomRules.js (menú Fiddler> Reglas> Personalizar reglas), agregue las siguientes líneas

oSession.oResponse.headers.Remove("X-Frame-Options"); oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");


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 fotograma si el encabezado del contenido de la fuente dice que no está permitido en los fotogramas. 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 <iframe> usando YQL. Aquí hay una prueba de concepto, probado en Chrome y Firefox: Hacker News en un <iframe> .

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 <base link> y un <script> cargando enlaces en un iframe usando YQL también,
  4. Inyecte este HTML en un <iframe> 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(/<head>/i, ''<head><base href="'' + url + ''"><scr'' + ''ipt>document.addEventListener("click", function(e) { if(e.target && e.target.nodeName == "A") { e.preventDefault(); parent.loadURL(e.target.href); } });</scr'' + ''ipt>'')); iframe.contentWindow.document.close(); } loadURL(iframe.src);