Chciałem tylko dołączyć zaktualizowaną odpowiedź dla każdego, kto znajdzie ten link, próbując dowiedzieć się, jak zezwolić aplikacji Rails na osadzenie w I-Frame i napotkanie problemów.
W chwili pisania tego, 28 maja 2020 r., Zmiany opcji X-Frame prawdopodobnie nie są najlepszym rozwiązaniem twojego problemu. Opcja „ZEZWÓL-OD” została całkowicie zabroniona przez wszystkie główne przeglądarki.
Nowoczesne rozwiązanie polega na zaimplementowaniu Content-Security-Policy i ustawieniu polityki 'frame_ancestors'. Klucz „frame_ancestors” wskazuje, które domeny mogą osadzać Twoją aplikację jako element iframe. Obecnie jest obsługiwany przez główne przeglądarki i zastępuje X-Frame-Options. Pozwoli to zapobiec przechodzeniu przez Clickjacking (w którym X-Frame-Options miał pomóc, zanim w dużej mierze stał się przestarzały) i zablokować aplikację w nowoczesnym środowisku.
Możesz ustawić Content-Security-Policy z Railsami 5.2 w inicjatorze (przykład poniżej), a dla Rails <5.2 możesz użyć klejnotu takiego jak klejnot Secure Headers: https://github.com/github/secure_headers
Jeśli chcesz, możesz również zastąpić specyfikacje zasad na podstawie kontrolera / akcji.
Zasady bezpieczeństwa zawartości doskonale nadają się do zaawansowanych zabezpieczeń. Sprawdź wszystkie rzeczy, które możesz skonfigurować w dokumentacji Rails: https://edgeguides.rubyonrails.org/security.html
Przykład Rails 5.2 dla Content-Security-Policy:
Rails.application.config.content_security_policy do |policy|
policy.frame_ancestors :self, 'some_website_that_embeds_your_app.com'
end
Przykład zmiany polityki specyficznej dla kontrolera:
class PostsController < ApplicationController
content_security_policy do |p|
p.frame_ancestors :self, 'some_other_website_that_can_embed_posts.com'
end
end