ฉันแค่อยากจะรวมคำตอบที่อัปเดตไว้ที่นี่สำหรับทุกคนที่พบลิงก์นี้เมื่อพยายามหาวิธีอนุญาตให้แอป Rails ของคุณฝังอยู่ใน I-Frame และพบปัญหา
เมื่อเขียนสิ่งนี้ 28 พฤษภาคม 2020 การเปลี่ยนแปลง X-Frame-Options อาจไม่ใช่วิธีแก้ปัญหาที่ดีที่สุดของคุณ ตัวเลือก "ALLOW-FROM" ไม่ได้รับอนุญาตจากเบราว์เซอร์หลัก ๆ ทั้งหมด
วิธีแก้ปัญหาที่ทันสมัยคือการใช้นโยบายเนื้อหา - ความปลอดภัยและกำหนดนโยบาย 'frame_ancestors' คีย์ "frame_ancestors" จะกำหนดโดเมนที่สามารถฝังแอปของคุณเป็น iframe ได้ ปัจจุบันรองรับโดยเบราว์เซอร์หลักและแทนที่ X-Frame-Options ของคุณ วิธีนี้จะช่วยให้คุณสามารถป้องกัน Clickjacking (ซึ่งเดิมที X-Frame-Options มีจุดมุ่งหมายเพื่อช่วยก่อนที่จะเลิกใช้งานส่วนใหญ่) และล็อกแอปของคุณในสภาพแวดล้อมที่ทันสมัย
คุณสามารถตั้งค่า Content-Security-Policy ด้วย Rails 5.2 ในตัวเริ่มต้น (ตัวอย่างด้านล่าง) และสำหรับ Rails <5.2 คุณสามารถใช้อัญมณีเช่น Secure Headers gem: https://github.com/github/secure_headers
นอกจากนี้คุณยังสามารถแทนที่ข้อกำหนดนโยบายบนพื้นฐานของตัวควบคุม / การดำเนินการได้หากต้องการ
Content-Security-Policies เหมาะสำหรับการป้องกันความปลอดภัยขั้นสูง ตรวจสอบทุกสิ่งที่คุณสามารถกำหนดค่าได้ในเอกสาร Rails: https://edgeguides.rubyonrails.org/security.html
ตัวอย่าง Rails 5.2 สำหรับ Content-Security-Policy:
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