web-dev-qa-db-fra.com

Comment remplacer les X-Frame-Options pour un contrôleur ou une action dans Rails 4

Rails 4 semble définir une valeur par défaut de SAMEORIGIN pour le X-Frame-Options En-tête de réponse HTTP. Ceci est génial pour la sécurité, mais cela ne permet pas à certaines parties de votre application d'être disponibles dans un iframe sur un domaine différent.

Vous pouvez remplacer la valeur de X-Frame-Options globalement en utilisant le config.action_dispatch.default_headers réglage:

config.action_dispatch.default_headers['X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"

Mais comment l’annulez-vous pour un seul contrôleur ou une seule action?

82
Chris Peters

Si vous souhaitez supprimer complètement l'en-tête, vous pouvez créer un fichier after_action filtre:

class FilesController < ApplicationController
  after_action :allow_iframe, only: :embed

  def embed
  end

private

  def allow_iframe
    response.headers.except! 'X-Frame-Options'
  end
end

Ou bien sûr, vous pouvez coder le after_action pour définir la valeur sur quelque chose de différent:

class FacebookController < ApplicationController
  after_action :allow_facebook_iframe

private

  def allow_facebook_iframe
    response.headers['X-Frame-Options'] = 'ALLOW-FROM https://apps.facebook.com'
  end
end

Notez que vous devez vider votre cache dans certains navigateurs (Chrome for me) lors du débogage.

130
Chris Peters