ruby-on-rails responsive-design x-frame-options

ruby on rails - No puedo mostrar la aplicación Rails 4 en iframe incluso si ''X-Frame-Options'' es ''ALLOWALL''



ruby-on-rails responsive-design (7)

Cuando ''Carga denegada por X-Frame-Options'' usando Heroku y Firefox

Tuve un problema similar donde seguí recibiendo este error solo en Firefox. Tenía una página web PHP alojada en MochaHost que sirve una aplicación de Rails alojada en Heroku (así que la aplicación RoR tiene una página con un iframe que apunta a la página web PHP y funciona en todos los navegadores, excepto en Firefox).

Pude resolver el problema estableciendo un encabezado predeterminado para todas mis solicitudes en el archivo de entorno específico:

# config/enviroments/production.rb config.action_dispatch.default_headers = { ''X-Frame-Options'' => ''ALLOWALL'' }

Editar (como sugirió )

Idealmente, no debe establecer un encabezado predeterminado y hacer esto solo para las acciones que se deben representar en un iFrame. Si toda su aplicación se sirve dentro de un iFrame, debe mencionar explícitamente el Origen :

# config/enviroments/production.rb config.action_dispatch.default_headers = { ''X-Frame-Options'' => ''ALLOW-FROM http://some-origin.com'' }

Estoy tratando de probar un diseño receptivo. Estoy usando Rails 4. Sé que establece ''X-Frame-Options'' en SAME ORIGIN. Así que lo sobreescribí en development.rb usando

config.action_dispatch.default_headers = { ''X-Frame-Options'' => ''ALLOWALL'' }

Y funcionó. Revisé la solicitud de red en la consola de Chrome y es la siguiente:

Pero aún sitios web como responsive.is y responsinator.com me dan el siguiente error:

Refused to display ''http://localhost:3000/'' in a frame because it set ''X-Frame-Options'' to ''SAMEORIGIN''. about:blank:1

¿¿Que esta pasando??


Encontré otra causa para esto. Suponiendo que se implementa la solución ALLOWALL o similar, el siguiente intento es utilizar contenido http en un sitio web https que causa riesgos de seguridad y está bloqueado por mozilla, IE y probablemente otros navegadores. Me llevó 6 horas identificar esto, espero que al compartir pueda reducir el dolor de alguien ...

Puede ser verificado por:

  • utilizando las herramientas web de su navegador que deberían mostrar un error.
  • los registros web carecerán de conexión con su sitio de suministro.
  • reemplace su URL de contenido con una página de inicio de https del banco debe demostrar que el iframe funciona de otra manera.

La solución es preguntar a la fuente si tienen contenido https o encontrar otro proveedor.

árbitro:


Intente simplemente eliminar este encabezado ''X-Frame-Options''. Tal vez de esta manera en el controlador:

before_filter :allow_iframe_requests ... def allow_iframe_requests response.headers.delete(''X-Frame-Options'') end



Si desea que este cambio surta efecto en todos los entornos, colóquelo en application.rb.


Tuve el mismo problema que tú, y busqué una solución a este problema toda la noche.

Finalmente descubrí por qué sucede. Es a causa de la memoria caché de Chrome.

Puedes ver que el header[''X-Frame-Options''] es ALLOWALL pero no funciona.

Intenta abrir una "Nueva ventana de incógnito" y ve la misma página, ¡y funciona!

Este problema solo sucedió en modo de desarrollo en mi prueba. Funcionó bien en modo de producción .


Rails 4 added un valor predeterminado de encabezado HTTP de X-Frame-Options de SAMEORIGIN . Esto es bueno para la seguridad, pero cuando desea que su action sea ​​llamada en un iframe , puede hacer esto:

Para permitir todos los orígenes:

class MyController < ApplicationController def iframe_action response.headers.delete "X-Frame-Options" render_something end end

Para permitir un origen específico:

class MyController < ApplicationController def iframe_action response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-origin.com" render_something end end

Uso: after_filter

Cuando necesite usar más de una de sus action en un iframe , es una buena idea hacer un método y llamarlo con :after_filter :

class ApplicationController < ActionController::Base private def allow_iframe response.headers.delete "X-Frame-Options" end end

Úselo en sus controladores de esta manera:

class MyController < ApplicationController after_filter :allow_iframe, only: [:basic_embed, :awesome_embed] def basic_embed render_something end def awesome_embed render_something end # Other Actions... end

Realice un Refresco Difícil en su navegador, o use otro navegador para ver los cambios

Vía: Rails 4: permite que las acciones específicas se incrusten como iframes