Tôi chỉ muốn đưa câu trả lời cập nhật vào đây cho bất kỳ ai tìm thấy liên kết này khi cố gắng tìm ra cách cho phép ứng dụng Rails của bạn được nhúng vào I-Frame và gặp sự cố.
Khi viết bài này, ngày 28 tháng 5 năm 2020, các thay đổi X-Frame-Options có lẽ không phải là giải pháp tốt nhất cho vấn đề của bạn. Tùy chọn "CHO PHÉP TỪ" hoàn toàn không được phép bởi tất cả các trình duyệt chính.
Giải pháp hiện đại là thực hiện Chính sách-Bảo mật-Nội dung và đặt chính sách 'Tổ tiên khung'. Khóa 'frame_ancestors' chỉ định miền nào có thể nhúng ứng dụng của bạn dưới dạng iframe. Nó hiện được hỗ trợ bởi các trình duyệt chính và ghi đè X-Frame-Options của bạn. Điều này sẽ cho phép bạn ngăn chặn Clickjacking (mà X-Frame-Options ban đầu được dự định để trợ giúp trước khi nó phần lớn không được dùng nữa) và khóa ứng dụng của bạn trong một môi trường hiện đại.
Bạn có thể thiết lập Nội dung-Bảo mật-Chính sách với Rails 5.2 trong trình khởi tạo (ví dụ bên dưới) và đối với Rails <5.2, bạn có thể sử dụng một viên đá quý như đá quý Secure Headers: https://github.com/github/secure_headers
Bạn cũng có thể ghi đè các thông số kỹ thuật chính sách trên cơ sở bộ điều khiển / hành động nếu bạn muốn.
Nội dung-Bảo mật-Chính sách là rất tốt cho các biện pháp bảo mật nâng cao. Kiểm tra tất cả những thứ bạn có thể định cấu hình trong tài liệu Rails: https://edgeguides.rubyonrails.org/security.html
Ví dụ về Rails 5.2 cho Nội dung-Bảo mật-Chính sách:
Rails.application.config.content_security_policy do |policy|
policy.frame_ancestors :self, 'some_website_that_embeds_your_app.com'
end
Ví dụ về thay đổi cụ thể của bộ điều khiển đối với chính sách:
class PostsController < ApplicationController
content_security_policy do |p|
p.frame_ancestors :self, 'some_other_website_that_can_embed_posts.com'
end
end