secure_headers 5.0.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of secure_headers might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36d743dc370dce07a032c6e5154eef9081e5d258
4
- data.tar.gz: 89c7965e04093df147c7543f9b3cd4cc3e347e41
3
+ metadata.gz: e421f2b5968b737c264d985109c40f477a84c44c
4
+ data.tar.gz: 7839fcc26e1db7ddda587f063a6f2f0db052ffa2
5
5
  SHA512:
6
- metadata.gz: 11985973764bd80715c68e232e977074f084557deea8b2b96962d5c74f79af81601df30d6dda3150d5b278c75ee7f45c95e93bac26d62265fd5dabd99a39e024
7
- data.tar.gz: 9cf62ba5f6ebaad74cec79c2201faf1521aad2a65627d5a64c74c9ff668b535664c1c49b285578713ce2bc2472b704e6b972c51074d2574ff2ad574cf6b87870
6
+ metadata.gz: cd41e5df0da65b0f5304d58f73eec970315dd316598d7049fc59de87b16b97e281032c55df7b96490423e93bf24457e30b87196f2a000d127194a1c1878d4032
7
+ data.tar.gz: 4465312cd5cc22f2f74f77a4572c3585a9ecd1461ea2cfcbb3fd9dc1f506c06e22aff4efdd92b2eb8f90cd8c88b9eeacf34126c86444398f6d2ecfba04903e72
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 5.0.2
2
+
3
+ - Updates `Referrer-Policy` header to support multiple policy values
4
+
1
5
  ## 5.0.1
2
6
 
3
7
  - Updates `Expect-CT` header to use a comma separator between directives, as specified in the most current spec.
data/README.md CHANGED
@@ -18,7 +18,6 @@ The gem will automatically apply several headers that are related to security.
18
18
  - X-Download-Options - [Prevent file downloads opening](https://msdn.microsoft.com/library/jj542450(v=vs.85).aspx)
19
19
  - X-Permitted-Cross-Domain-Policies - [Restrict Adobe Flash Player's access to data](https://www.adobe.com/devnet/adobe-media-server/articles/cross-domain-xml-for-streaming.html)
20
20
  - Referrer-Policy - [Referrer Policy draft](https://w3c.github.io/webappsec-referrer-policy/)
21
- - Public Key Pinning - Pin certificate fingerprints in the browser to prevent man-in-the-middle attacks due to compromised Certificate Authorities. [Public Key Pinning Specification](https://tools.ietf.org/html/rfc7469)
22
21
  - Expect-CT - Only use certificates that are present in the certificate transparency logs. [Expect-CT draft specification](https://datatracker.ietf.org/doc/draft-stark-expect-ct/).
23
22
  - Clear-Site-Data - Clearing browser data for origin. [Clear-Site-Data specification](https://w3c.github.io/webappsec-clear-site-data/).
24
23
 
@@ -31,7 +30,6 @@ It can also mark all http cookies with the Secure, HttpOnly and SameSite attribu
31
30
  - [Named overrides and appends](docs/named_overrides_and_appends.md)
32
31
  - [Per action configuration](docs/per_action_configuration.md)
33
32
  - [Cookies](docs/cookies.md)
34
- - [HPKP](docs/HPKP.md)
35
33
  - [Hashes](docs/hashes.md)
36
34
  - [Sinatra Config](docs/sinatra.md)
37
35
 
@@ -67,13 +65,13 @@ SecureHeaders::Configuration.default do |config|
67
65
  }
68
66
  }
69
67
  # Add "; preload" and submit the site to hstspreload.org for best protection.
70
- config.hsts = "max-age=#{20.years.to_i}"
68
+ config.hsts = "max-age=#{1.week.to_i}"
71
69
  config.x_frame_options = "DENY"
72
70
  config.x_content_type_options = "nosniff"
73
71
  config.x_xss_protection = "1; mode=block"
74
72
  config.x_download_options = "noopen"
75
73
  config.x_permitted_cross_domain_policies = "none"
76
- config.referrer_policy = "origin-when-cross-origin"
74
+ config.referrer_policy = %w(origin-when-cross-origin strict-origin-when-cross-origin)
77
75
  config.csp = {
78
76
  # "meta" values. these will shape the header, but the values are not included in the header.
79
77
  preserve_schemes: true, # default: false. Schemes are removed from host sources to save bytes and discourage mixed content.
@@ -22,14 +22,21 @@ module SecureHeaders
22
22
  # Returns a default header if no configuration is provided, or a
23
23
  # header name and value based on the config.
24
24
  def make_header(config = nil)
25
- [HEADER_NAME, config || DEFAULT_VALUE]
25
+ config ||= DEFAULT_VALUE
26
+ [HEADER_NAME, Array(config).join(", ")]
26
27
  end
27
28
 
28
29
  def validate_config!(config)
29
- return if config.nil? || config == OPT_OUT
30
- raise TypeError.new("Must be a string. Found #{config.class}: #{config}") unless config.is_a?(String)
31
- unless VALID_POLICIES.include?(config.downcase)
32
- raise ReferrerPolicyConfigError.new("Value can only be one of #{VALID_POLICIES.join(', ')}")
30
+ case config
31
+ when nil, OPT_OUT
32
+ # valid
33
+ when String, Array
34
+ config = Array(config)
35
+ unless config.all? { |t| t.is_a?(String) && VALID_POLICIES.include?(t.downcase) }
36
+ raise ReferrerPolicyConfigError.new("Value can only be one or more of #{VALID_POLICIES.join(", ")}")
37
+ end
38
+ else
39
+ raise TypeError.new("Must be a string or array of strings. Found #{config.class}: #{config}")
33
40
  end
34
41
  end
35
42
  end
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
  Gem::Specification.new do |gem|
4
4
  gem.name = "secure_headers"
5
- gem.version = "5.0.1"
5
+ gem.version = "5.0.2"
6
6
  gem.authors = ["Neil Matatall"]
7
7
  gem.email = ["neil.matatall@gmail.com"]
8
8
  gem.description = "Manages application of security headers with many safe defaults."
@@ -5,6 +5,7 @@ module SecureHeaders
5
5
  describe ReferrerPolicy do
6
6
  specify { expect(ReferrerPolicy.make_header).to eq([ReferrerPolicy::HEADER_NAME, "origin-when-cross-origin"]) }
7
7
  specify { expect(ReferrerPolicy.make_header("no-referrer")).to eq([ReferrerPolicy::HEADER_NAME, "no-referrer"]) }
8
+ specify { expect(ReferrerPolicy.make_header(%w(origin-when-cross-origin strict-origin-when-cross-origin))).to eq([ReferrerPolicy::HEADER_NAME, "origin-when-cross-origin, strict-origin-when-cross-origin"]) }
8
9
 
9
10
  context "valid configuration values" do
10
11
  it "accepts 'no-referrer'" do
@@ -60,14 +61,31 @@ module SecureHeaders
60
61
  ReferrerPolicy.validate_config!(nil)
61
62
  end.not_to raise_error
62
63
  end
64
+
65
+ it "accepts array of policy values" do
66
+ expect do
67
+ ReferrerPolicy.validate_config!(
68
+ %w(
69
+ origin-when-cross-origin
70
+ strict-origin-when-cross-origin
71
+ )
72
+ )
73
+ end.not_to raise_error
74
+ end
63
75
  end
64
76
 
65
- context "invlaid configuration values" do
77
+ context "invalid configuration values" do
66
78
  it "doesn't accept invalid values" do
67
79
  expect do
68
80
  ReferrerPolicy.validate_config!("open")
69
81
  end.to raise_error(ReferrerPolicyConfigError)
70
82
  end
83
+
84
+ it "doesn't accept invalid types" do
85
+ expect do
86
+ ReferrerPolicy.validate_config!({})
87
+ end.to raise_error(TypeError)
88
+ end
71
89
  end
72
90
  end
73
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: secure_headers
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Matatall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-19 00:00:00.000000000 Z
11
+ date: 2017-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -61,7 +61,6 @@ files:
61
61
  - LICENSE
62
62
  - README.md
63
63
  - Rakefile
64
- - docs/HPKP.md
65
64
  - docs/cookies.md
66
65
  - docs/hashes.md
67
66
  - docs/named_overrides_and_appends.md
data/docs/HPKP.md DELETED
@@ -1,17 +0,0 @@
1
- ## HTTP Public Key Pins
2
-
3
- Be aware that pinning error reporting is governed by the same rules as everything else. If you have a pinning failure that tries to report back to the same origin, by definition this will not work.
4
-
5
- ```ruby
6
- config.hpkp = {
7
- max_age: 60.days.to_i, # max_age is a required parameter
8
- include_subdomains: true, # whether or not to apply pins to subdomains
9
- # Per the spec, SHA256 hashes are the only currently supported format.
10
- pins: [
11
- {sha256: 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'},
12
- {sha256: '73a2c64f9545172c1195efb6616ca5f7afd1df6f245407cafb90de3998a1c97f'}
13
- ],
14
- report_only: true, # defaults to false (report-only mode)
15
- report_uri: 'https://report-uri.io/example-hpkp'
16
- }
17
- ```