Câu hỏi Cách ghi đè tùy chọn X-Frame-cho bộ điều khiển hoặc tác vụ trong Rails 4


Rails 4 xuất hiện để đặt giá trị mặc định là SAMEORIGIN cho X-Frame-Options Tiêu đề phản hồi HTTP. Đây là tuyệt quá để bảo mật nhưng không cho phép các phần của ứng dụng của bạn khả dụng trong iframe trên một tên miền khác.

Bạn có thể ghi đè giá trị của X-Frame-Options trên toàn cầu sử dụng config.action_dispatch.default_headers cài đặt:

config.action_dispatch.default_headers['X-Frame-Options'] = "ALLOW-FROM https://apps.facebook.com"

Nhưng làm thế nào để bạn ghi đè nó chỉ cho một bộ điều khiển hoặc hành động?


76
2017-08-26 13:50


gốc




Các câu trả lời:


Nếu bạn muốn xóa hoàn toàn tiêu đề, bạn có thể tạo after_action bộ lọc:

class FilesController < ApplicationController
  after_action :allow_iframe, only: :embed

  def embed
  end

private

  def allow_iframe
    response.headers.except! 'X-Frame-Options'
  end
end

Hoặc, tất nhiên, bạn có thể viết mã after_action để đặt giá trị cho một cái gì đó khác:

class FacebookController < ApplicationController
  after_action :allow_facebook_iframe

private

  def allow_facebook_iframe
    response.headers['X-Frame-Options'] = 'ALLOW-FROM https://apps.facebook.com'
  end
end

Lưu ý rằng bạn cần xóa bộ nhớ cache trong một số trình duyệt nhất định (Chrome cho tôi) trong khi gỡ lỗi này.


123
2017-08-26 13:50



Làm thế nào bạn sẽ có được điều này để làm việc trên một redirect_to? (Đang cố gắng ngay bây giờ với ứng dụng Angular của tôi và nó không hoạt động) - kittyminky
Tôi cho rằng cả hành động chứa redirect_to và hành động mà nó chuyển hướng đến sẽ cần điều này được áp dụng. Bạn đang gặp phải một lỗi cụ thể? Âm thanh như một câu hỏi hay về Stack Overflow! - Chris Peters
Tôi nhận ra tôi đã có after_action  trước nó đã được chuyển hướng đến hành động điều khiển cuối cùng chuyển hướng đến Angular tuyến đường. Cảm ơn bạn! - kittyminky
Không phải vậy cần thiết để làm điều này trong một after_action, mặc dù thật tiện lợi để làm như vậy, ví dụ: trong một Frontend::BaseController nơi nó áp dụng cho toàn bộ lối vào. Bạn cũng có thể chạy response.headers.except! ... trong một hành động. - codener
Hiện tại, không hoạt động trong Chrome. Lỗi giao diện điều khiển là tiêu đề "Không hợp lệ 'X-Frame-Tùy chọn' gặp phải khi tải 'con': 'ALLOW-FROM parent' không phải là chỉ thị được công nhận. Tiêu đề sẽ bị bỏ qua". Được đánh dấu là sẽ không được khắc phục trong Chromium, thay vào đó: "khung tổ tiên" sẽ được gửi trong cả Chrome và Firefox và là cách phù hợp để hỗ trợ chức năng này ". bugs.chromium.org/p/chromium/issues/detail?id=129139 - richardkmiller