Rails 4 scheint einen Standardwert SAMEORIGIN
für den X-Frame-Options
HTTP-Antwortheader festzulegen. Dies ist aus Sicherheitsgründen sehr hilfreich, ermöglicht jedoch nicht, dass Teile Ihrer App in einer iframe
anderen Domain verfügbar sind .
Sie können den Wert von X-Frame-Options
global mit der folgenden config.action_dispatch.default_headers
Einstellung überschreiben :
config.action_dispatch.default_headers['X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"
Aber wie überschreiben Sie es für nur einen Controller oder eine Aktion?
ruby-on-rails
iframe
http-headers
ruby-on-rails-4
x-frame-options
Chris Peters
quelle
quelle
redirect_to
als auch die Aktion, zu der sie umleitet, angewendet werden müssen. Erhalten Sie einen bestimmten Fehler? Klingt nach einer guten neuen Frage zu Stack Overflow!after_action
bevor es zur endgültigen Controller-Aktion umgeleitet wurde, die zu denAngular
Routen umleitet . Danke dir!after_action
, obwohl dies praktisch ist, z. B. in einem Bereich,Frontend::BaseController
in dem es für das gesamte Frontend gilt. Sie können auchresponse.headers.except! ...
innerhalb einer Aktion ausgeführt werden.Ich wollte hier nur eine aktualisierte Antwort für alle einfügen, die diesen Link finden, wenn sie herausfinden möchten, wie Ihre Rails-App in einen I-Frame eingebettet werden kann und Probleme auftreten.
Zum Zeitpunkt des Schreibens am 28. Mai 2020 sind die Änderungen der X-Frame-Optionen wahrscheinlich nicht die beste Lösung für Ihr Problem. Die Option "ALLOW-FROM" wurde von allen gängigen Browsern vollständig abgelehnt.
Die moderne Lösung besteht darin, eine Content-Security-Richtlinie zu implementieren und eine 'frame_ancestors'-Richtlinie festzulegen. Der Schlüssel 'frame_ancestors' gibt an, welche Domains Ihre App als Iframe einbetten können. Es wird derzeit von gängigen Browsern unterstützt und überschreibt Ihre X-Frame-Optionen. Auf diese Weise können Sie Clickjacking verhindern (bei dem die X-Frame-Optionen ursprünglich helfen sollten, bevor es weitgehend veraltet war) und Ihre App in einer modernen Umgebung sperren.
Sie können eine Inhaltssicherheitsrichtlinie mit Rails 5.2 in einem Initialisierer einrichten (Beispiel unten), und für Rails <5.2 können Sie einen Edelstein wie den Edelstein "Sichere Header" verwenden: https://github.com/github/secure_headers
Sie können die Richtlinienspezifikationen auch auf Controller- / Aktionsbasis überschreiben, wenn Sie möchten.
Inhaltssicherheitsrichtlinien eignen sich hervorragend für erweiterten Sicherheitsschutz. Überprüfen Sie alle Dinge, die Sie in den Rails-Dokumenten konfigurieren können: https://edgeguides.rubyonrails.org/security.html
Ein Rails 5.2-Beispiel für eine Content-Security-Policy:
Ein Beispiel für eine Controller-spezifische Änderung einer Richtlinie:
quelle
Verwenden Sie
response.set_header('X-Frame-Options', 'ALLOW-FROM https://apps.facebook.com')
stattdessen für Rails 5+ . Oder wennALLOW-FROM
es nicht funktioniert und Sie eine schnelle Lösung benötigen, können Sie es auf einstellenALLOWALL
quelle