Skip to content
This repository has been archived by the owner on May 16, 2021. It is now read-only.

Commit

Permalink
Merge pull request #74 from statianzo/invalid-referer
Browse files Browse the repository at this point in the history
Discard invalid Referer header
  • Loading branch information
rkh committed Feb 4, 2014
2 parents 83178d1 + 02b765b commit 6d953d2
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
1 change: 1 addition & 0 deletions lib/rack/protection/base.rb
Expand Up @@ -92,6 +92,7 @@ def referrer(env)
ref = env['HTTP_REFERER'].to_s
return if !options[:allow_empty_referrer] and ref.empty?
URI.parse(ref).host || Request.new(env).host
rescue URI::InvalidURIError
end

def origin(env)
Expand Down
33 changes: 32 additions & 1 deletion spec/base_spec.rb
@@ -1,9 +1,40 @@
require File.expand_path('../spec_helper.rb', __FILE__)

describe Rack::Protection::Base do

subject { described_class.new(lambda {}) }

describe "#random_string" do
it "outputs a string of 32 characters" do
described_class.new(lambda {}).random_string.length.should == 32
subject.random_string.length.should == 32
end
end

describe "#referrer" do
it "Reads referrer from Referer header" do
env = {"HTTP_HOST" => "foo.com", "HTTP_REFERER" => "http://bar.com/valid"}
subject.referrer(env).should == "bar.com"
end

it "Reads referrer from Host header when Referer header is relative" do
env = {"HTTP_HOST" => "foo.com", "HTTP_REFERER" => "/valid"}
subject.referrer(env).should == "foo.com"
end

it "Reads referrer from Host header when Referer header is missing" do
env = {"HTTP_HOST" => "foo.com"}
subject.referrer(env).should == "foo.com"
end

it "Returns nil when Referer header is missing and allow_empty_referrer is false" do
env = {"HTTP_HOST" => "foo.com"}
subject.options[:allow_empty_referrer] = false
subject.referrer(env).should be_nil
end

it "Returns nil when Referer header is invalid" do
env = {"HTTP_HOST" => "foo.com", "HTTP_REFERER" => "http://bar.com/bad|uri"}
subject.referrer(env).should be_nil
end
end
end

0 comments on commit 6d953d2

Please sign in to comment.