secure_headers 2.2.0 → 2.2.1
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/fixtures/rails_3_2_12/spec/controllers/other_things_controller_spec.rb +1 -1
- data/fixtures/rails_4_1_8/spec/controllers/other_things_controller_spec.rb +1 -1
- data/lib/secure_headers/headers/content_security_policy.rb +12 -2
- data/lib/secure_headers/version.rb +1 -1
- data/secure_headers.gemspec +1 -0
- data/spec/lib/secure_headers/headers/content_security_policy_spec.rb +25 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8505e6e7242a976db378e97869dd8690e49fbe54
|
4
|
+
data.tar.gz: 32b1d9c752c03f66987f007c41c795c7f57d8e6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 989eaa8a180a9d8f5172305eb2d0cb6df13e37a8ba49587c8d1596f8cd4864838982b127a9a26e74d441fd0236cd165b9299bf8206fa32ebfcd4d05d234b55a5
|
7
|
+
data.tar.gz: 7437baa6edae3a38c3f5023b8a94cc58aa563b9aed732db10767b7996eaaf53f5b2f7af6d872ad0775ce7a02e547353238d36a118bb3b6f3e734e6ed37d75dd7
|
@@ -13,7 +13,7 @@ describe OtherThingsController, :type => :controller do
|
|
13
13
|
options = opts.merge(
|
14
14
|
{
|
15
15
|
'HTTPS' => 'on',
|
16
|
-
'HTTP_USER_AGENT' => "Mozilla/5.0 (
|
16
|
+
'HTTP_USER_AGENT' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/537.22 (KHTML like Gecko) Chrome/25.0.1364.99 Safari/537.22"
|
17
17
|
}
|
18
18
|
)
|
19
19
|
|
@@ -13,7 +13,7 @@ describe OtherThingsController, :type => :controller do
|
|
13
13
|
options = opts.merge(
|
14
14
|
{
|
15
15
|
'HTTPS' => 'on',
|
16
|
-
'HTTP_USER_AGENT' => "Mozilla/5.0 (
|
16
|
+
'HTTP_USER_AGENT' => "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/537.22 (KHTML like Gecko) Chrome/25.0.1364.99 Safari/537.22"
|
17
17
|
}
|
18
18
|
)
|
19
19
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'base64'
|
3
3
|
require 'securerandom'
|
4
|
+
require 'user_agent_parser'
|
4
5
|
|
5
6
|
module SecureHeaders
|
6
7
|
class ContentSecurityPolicyBuildError < StandardError; end
|
@@ -205,8 +206,12 @@ module SecureHeaders
|
|
205
206
|
elsif %{self none}.include?(val)
|
206
207
|
"'#{val}'"
|
207
208
|
elsif val == 'nonce'
|
208
|
-
|
209
|
-
|
209
|
+
if supports_nonces?(@ua)
|
210
|
+
self.class.set_nonce(@controller, nonce)
|
211
|
+
["'nonce-#{nonce}'", "'unsafe-inline'"]
|
212
|
+
else
|
213
|
+
"'unsafe-inline'"
|
214
|
+
end
|
210
215
|
else
|
211
216
|
val
|
212
217
|
end
|
@@ -258,5 +263,10 @@ module SecureHeaders
|
|
258
263
|
def build_directive(key)
|
259
264
|
"#{self.class.symbol_to_hyphen_case(key)} #{@config[key].join(" ")}; "
|
260
265
|
end
|
266
|
+
|
267
|
+
def supports_nonces?(user_agent)
|
268
|
+
parsed_ua = UserAgentParser.parse(user_agent)
|
269
|
+
["Chrome", "Opera", "Firefox"].include?(parsed_ua.family)
|
270
|
+
end
|
261
271
|
end
|
262
272
|
end
|
data/secure_headers.gemspec
CHANGED
@@ -19,5 +19,6 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
20
|
gem.require_paths = ["lib"]
|
21
21
|
gem.add_development_dependency "rake"
|
22
|
+
gem.add_dependency "user_agent_parser"
|
22
23
|
gem.post_install_message = "Warning: lambda config values will be broken until you add |controller|. e.g. :enforce => lambda { |controller| some_expression }"
|
23
24
|
end
|
@@ -17,7 +17,8 @@ module SecureHeaders
|
|
17
17
|
FIREFOX_23 = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0"
|
18
18
|
CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
|
19
19
|
CHROME_25 = "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/537.22 (KHTML like Gecko) Chrome/25.0.1364.99 Safari/537.22"
|
20
|
-
|
20
|
+
SAFARI = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
|
21
|
+
OPERA = "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16"
|
21
22
|
|
22
23
|
def request_for user_agent, request_uri=nil, options={:ssl => false}
|
23
24
|
double(:ssl? => options[:ssl], :env => {'HTTP_USER_AGENT' => user_agent}, :url => (request_uri || 'http://areallylongdomainexample.com') )
|
@@ -184,11 +185,33 @@ module SecureHeaders
|
|
184
185
|
end
|
185
186
|
|
186
187
|
context "when using a nonce" do
|
187
|
-
it "adds a nonce and unsafe-inline to the script-src value" do
|
188
|
+
it "adds a nonce and unsafe-inline to the script-src value when using chrome" do
|
188
189
|
header = ContentSecurityPolicy.new(default_opts.merge(:script_src => "self nonce"), :request => request_for(CHROME))
|
189
190
|
expect(header.value).to include("script-src 'self' 'nonce-#{header.nonce}' 'unsafe-inline'")
|
190
191
|
end
|
191
192
|
|
193
|
+
it "adds a nonce and unsafe-inline to the script-src value when using firefox" do
|
194
|
+
header = ContentSecurityPolicy.new(default_opts.merge(:script_src => "self nonce"), :request => request_for(FIREFOX))
|
195
|
+
expect(header.value).to include("script-src 'self' 'nonce-#{header.nonce}' 'unsafe-inline'")
|
196
|
+
end
|
197
|
+
|
198
|
+
it "adds a nonce and unsafe-inline to the script-src value when using opera" do
|
199
|
+
header = ContentSecurityPolicy.new(default_opts.merge(:script_src => "self nonce"), :request => request_for(OPERA))
|
200
|
+
expect(header.value).to include("script-src 'self' 'nonce-#{header.nonce}' 'unsafe-inline'")
|
201
|
+
end
|
202
|
+
|
203
|
+
it "does not add a nonce and unsafe-inline to the script-src value when using Safari" do
|
204
|
+
header = ContentSecurityPolicy.new(default_opts.merge(:script_src => "self nonce"), :request => request_for(SAFARI))
|
205
|
+
expect(header.value).to include("script-src 'self' 'unsafe-inline'")
|
206
|
+
expect(header.value).not_to include("nonce")
|
207
|
+
end
|
208
|
+
|
209
|
+
it "does not add a nonce and unsafe-inline to the script-src value when using IE" do
|
210
|
+
header = ContentSecurityPolicy.new(default_opts.merge(:script_src => "self nonce"), :request => request_for(IE))
|
211
|
+
expect(header.value).to include("script-src 'self' 'unsafe-inline'")
|
212
|
+
expect(header.value).not_to include("nonce")
|
213
|
+
end
|
214
|
+
|
192
215
|
it "adds a nonce and unsafe-inline to the style-src value" do
|
193
216
|
header = ContentSecurityPolicy.new(default_opts.merge(:style_src => "self nonce"), :request => request_for(CHROME))
|
194
217
|
expect(header.value).to include("style-src 'self' 'nonce-#{header.nonce}' 'unsafe-inline'")
|
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: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neil Matatall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: user_agent_parser
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Security related headers all in one gem.
|
28
42
|
email:
|
29
43
|
- neil.matatall@gmail.com
|