J'utilise Sinatra pour renvoyer le contenu de certains IFRAME, et j'aimerais autoriser les src inter-domaines. Malheureusement, Sinatra ajoute automatiquement un en-tête X-Frame-Options à ma réponse. Comment puis-je le désactiver ?
Réponses
Trop de publicités?Sinatra utilise Rack::Protection en particulier le frame_options
qui est ce qui définit l'option X-Frame-Options
en-tête.
Vous pouvez configurer les protections utilisées . Sinatra active la plupart d'entre eux par défaut, (certains ne sont activés que si vous utilisez également des sessions, et Rack::Protection lui-même n'en active pas certains par défaut).
Pour empêcher l'envoi de la X-Frame-Options
vous devez désactiver l'en-tête frame_options
comme ça :
set :protection, :except => :frame_options
Une autre solution, et celle que j'ai fini par utiliser en production, fait appel à monkey-Parcheando. Rack::Protection::FrameOptions
:
# This monkeypatch is needed to ensure the X-Frame-Options header is
# never set by rack-protection.
module Rack
module Protection
class FrameOptions < Base
def call(env)
status, headers, body = @app.call(env)
[status, headers, body]
end
end
end
end
Aucune des options présentées ici n'a fonctionné pour mon application Sinatra. J'ai fini par ajouter un filtre ultérieur pour modifier le fichier X-Frame-Options
en-tête pour permettre à l'application d'être encadrée par Facebook.
after do
headers({ 'X-Frame-Options' => 'ALLOW-FROM apps.facebook.com' })
end
Je pense que j'ai trouvé une bonne façon de gérer cela, mais j'aimerais avoir des commentaires.
L'objectif est de désactiver les options X-Frame-Options pour une seule route afin de conserver tous les avantages de la protection du rack :
app.get'/hello_world' do
headers({ 'X-Frame-Options' => '' })
"HELLO WORLD"
end
Je pense que c'est une bonne option car elle semble empêcher la protection du rack d'ajouter l'en-tête SAMEORIGIN sur cette route.
La réponse "set :protection, :except => :frame_options" ne fonctionne pas pour moi, avec Sinatra-1.3.3.
J'ai dû trouver une solution ; j'ai mis ce mutha dans mon fichier config.ru. Bien sûr, vous pouvez changer l'en-tête pour qu'il soit ce que vous voulez.
config.ru
class Rack::Protection::FrameOptions
def header
@header ||= {}
end
end
- Réponses précédentes
- Plus de réponses