secure_headers 4.0.0.alpha01 → 4.0.0.alpha02
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 +4 -4
- data/lib/secure_headers/headers/content_security_policy.rb +5 -3
- data/lib/secure_headers/headers/policy_management.rb +6 -2
- data/secure_headers.gemspec +1 -1
- data/spec/lib/secure_headers/headers/content_security_policy_spec.rb +5 -0
- data/spec/lib/secure_headers/headers/policy_management_spec.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3e3971d0169ad3db917dbf0d64e26425c9e8252
|
4
|
+
data.tar.gz: 6fa1f1c7b0d36063a4be0a19549ced444d6f07b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7f430815d9b49f0fdaf5c16854aab22d89f09721975a332769c9e0a2b055522a271a610fc8e8ec89614be286f4d4292e5b2105af61181a2670089f9fb42e58d
|
7
|
+
data.tar.gz: 044e9282dfc9c0a7b01c3ae4420c44781ffe460819e58d46b2eb7a9f08ba02a91937afed977c9ed13d4f9aad168e2d7b308108e9f977e5c515b6285b74a8f2b6
|
@@ -101,9 +101,11 @@ module SecureHeaders
|
|
101
101
|
else
|
102
102
|
@config.directive_value(directive)
|
103
103
|
end
|
104
|
-
|
105
|
-
|
106
|
-
|
104
|
+
|
105
|
+
if source_list != OPT_OUT && source_list && source_list.any?
|
106
|
+
normalized_source_list = minify_source_list(directive, source_list)
|
107
|
+
[symbol_to_hyphen_case(directive), normalized_source_list].join(" ")
|
108
|
+
end
|
107
109
|
end
|
108
110
|
|
109
111
|
# If a directive contains *, all other values are omitted.
|
@@ -202,7 +202,10 @@ module SecureHeaders
|
|
202
202
|
def validate_config!(config)
|
203
203
|
return if config.nil? || config.opt_out?
|
204
204
|
raise ContentSecurityPolicyConfigError.new(":default_src is required") unless config.directive_value(:default_src)
|
205
|
-
|
205
|
+
if config.directive_value(:script_src).nil?
|
206
|
+
raise ContentSecurityPolicyConfigError.new(":script_src is required, falling back to default-src is too dangerous. Use `script_src: OPT_OUT` to override")
|
207
|
+
end
|
208
|
+
|
206
209
|
ContentSecurityPolicyConfig.attrs.each do |key|
|
207
210
|
value = config.directive_value(key)
|
208
211
|
next unless value
|
@@ -342,12 +345,13 @@ module SecureHeaders
|
|
342
345
|
end
|
343
346
|
|
344
347
|
def ensure_array_of_strings!(directive, source_expression)
|
345
|
-
|
348
|
+
if (!source_expression.is_a?(Array) || !source_expression.compact.all? { |v| v.is_a?(String) }) && source_expression != OPT_OUT
|
346
349
|
raise ContentSecurityPolicyConfigError.new("#{directive} must be an array of strings")
|
347
350
|
end
|
348
351
|
end
|
349
352
|
|
350
353
|
def ensure_valid_sources!(directive, source_expression)
|
354
|
+
return if source_expression == OPT_OUT
|
351
355
|
source_expression.each do |expression|
|
352
356
|
if ContentSecurityPolicy::DEPRECATED_SOURCE_VALUES.include?(expression)
|
353
357
|
raise ContentSecurityPolicyConfigError.new("#{directive} contains an invalid keyword source (#{expression}). This value must be single quoted.")
|
data/secure_headers.gemspec
CHANGED
@@ -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 = "4.0.0.
|
5
|
+
gem.version = "4.0.0.alpha02"
|
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."
|
@@ -51,6 +51,11 @@ module SecureHeaders
|
|
51
51
|
expect(csp.value).to eq("default-src example.org")
|
52
52
|
end
|
53
53
|
|
54
|
+
it "does not build directives with a value of OPT_OUT (and bypasses directive requirements)" do
|
55
|
+
csp = ContentSecurityPolicy.new(default_src: %w(https://example.org), script_src: OPT_OUT)
|
56
|
+
expect(csp.value).to eq("default-src example.org")
|
57
|
+
end
|
58
|
+
|
54
59
|
it "does not remove schemes from report-uri values" do
|
55
60
|
csp = ContentSecurityPolicy.new(default_src: %w(https:), report_uri: %w(https://example.org))
|
56
61
|
expect(csp.value).to eq("default-src https:; report-uri https://example.org")
|
@@ -57,6 +57,12 @@ module SecureHeaders
|
|
57
57
|
end.to raise_error(ContentSecurityPolicyConfigError)
|
58
58
|
end
|
59
59
|
|
60
|
+
it "accepts OPT_OUT as a script-src value" do
|
61
|
+
expect do
|
62
|
+
ContentSecurityPolicy.validate_config!(ContentSecurityPolicyConfig.new(default_src: %w('self'), script_src: OPT_OUT))
|
63
|
+
end.to_not raise_error
|
64
|
+
end
|
65
|
+
|
60
66
|
it "requires :report_only to be a truthy value" do
|
61
67
|
expect do
|
62
68
|
ContentSecurityPolicy.validate_config!(ContentSecurityPolicyConfig.new(default_opts.merge(report_only: "steve")))
|
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: 4.0.0.
|
4
|
+
version: 4.0.0.alpha02
|
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-07-
|
11
|
+
date: 2017-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|