sinatra/rack-protection/lib/rack/protection/frame_options.rb

38 lines
1.2 KiB
Ruby
Raw Normal View History

2011-05-23 08:07:54 +00:00
require 'rack/protection'
module Rack
module Protection
2011-05-24 09:18:44 +00:00
##
# Prevented attack:: Clickjacking
# Supported browsers:: Internet Explorer 8, Firefox 3.6.9, Opera 10.50,
# Safari 4.0, Chrome 4.1.249.1042 and later
2011-05-24 10:23:22 +00:00
# More infos:: https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header
2011-05-24 09:18:44 +00:00
#
2011-05-24 10:16:29 +00:00
# Sets X-Frame-Options header to tell the browser avoid embedding the page
# in a frame.
#
2011-05-24 09:18:44 +00:00
# Options:
2011-05-24 10:16:29 +00:00
#
2011-05-24 09:18:44 +00:00
# frame_options:: Defines who should be allowed to embed the page in a
# frame. Use :deny to forbid any embedding, :sameorigin
# to allow embedding from the same origin (default).
2013-03-01 04:36:05 +00:00
class FrameOptions < Base
default_options :frame_options => :sameorigin
2013-03-01 04:36:05 +00:00
def frame_options
@frame_options ||= begin
frame_options = options[:frame_options]
frame_options = options[:frame_options].to_s.upcase unless frame_options.respond_to? :to_str
2013-03-01 04:36:05 +00:00
frame_options.to_str
end
end
2013-03-01 04:36:05 +00:00
def call(env)
status, headers, body = @app.call(env)
headers['X-Frame-Options'] ||= frame_options if html? headers
[status, headers, body]
end
2011-05-23 08:07:54 +00:00
end
end
end