我只想在这里提供一个更新的答案,供试图找出如何允许将Rails应用程序嵌入I-Frame并遇到问题的人士找到此链接。
撰写本文时,2020年5月28日,X-Frame-Options更改可能不是您解决问题的最佳方法。所有主要的浏览器都完全不允许使用“ ALLOW-FROM”选项。
现代的解决方案是实施内容安全策略并设置“ frame_ancestors”策略。“ frame_ancestors”键指定哪些域可以将您的应用嵌入为iframe。目前主要浏览器都支持它,并且会覆盖您的X-Frame-Options。这将使您能够防止Clickjacking(X-Frame-Options最初旨在在不推荐使用此功能之前就提供帮助)并在现代环境中锁定您的应用程序。
您可以在初始化器中使用Rails 5.2设置Content-Security-Policy(以下示例),对于Rails <5.2,您可以使用诸如Secure Headers gem之类的gem:https : //github.com/github/secure_headers
如果需要,您还可以根据控制器/操作来覆盖策略规范。
内容安全策略非常适合高级安全保护。检查一下您可以在Rails文档中配置的所有内容:https : //edgeguides.rubyonrails.org/security.html
内容安全策略的Rails 5.2示例:
Rails.application.config.content_security_policy do |policy|
policy.frame_ancestors :self, 'some_website_that_embeds_your_app.com'
end
特定于控制器的策略更改示例:
class PostsController < ApplicationController
content_security_policy do |p|
p.frame_ancestors :self, 'some_other_website_that_can_embed_posts.com'
end
end