我只是想在此处为任何发现此链接的人提供一个更新的答案,这些人在试图弄清楚如何允许您的 Rails 应用程序嵌入 I-Frame 并遇到问题时。
截至 2020 年 5 月 28 日撰写本文时,X-Frame-Options 更改可能不是您解决问题的最佳方法。“ALLOW-FROM”选项已被所有主要浏览器完全禁止。
现代解决方案是实施 Content-Security-Policy 并设置“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 示例:
# config/initializers/content_security_policy.rb
Rails.application.config.content_security_policy do |policy|
policy.frame_ancestors :self, 'some_website_that_embeds_your_app.com'
end
控制器特定更改策略的示例:
# Override policy inline
class PostsController < ApplicationController
content_security_policy do |p|
p.frame_ancestors :self, 'some_other_website_that_can_embed_posts.com'
end
end