secure_headers 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.

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: 8e454769ab715d2e94e5451190e7ef8679810ec0
4
- data.tar.gz: 9f0fd48b03bd3e8f5a60b85894492a4a9aee08a0
3
+ metadata.gz: 8505e6e7242a976db378e97869dd8690e49fbe54
4
+ data.tar.gz: 32b1d9c752c03f66987f007c41c795c7f57d8e6a
5
5
  SHA512:
6
- metadata.gz: 9ace533baba91512c2d8b15f12ed188d93feda9b20f7e682caaa740d413b1428e9c39deb2c2fbba4aec6462093f54126de9ca8cc5268d5b8d98851c82876fa6d
7
- data.tar.gz: 9b5e12226b456e4983eb31cd75f48ccadf34d80d125ff0fb67ee84afe56f3ca3a682890213e20e2c24e2c715073c0284b4ab8fc3fc86ad722c7ae6d08c0bb207
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 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.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 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.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
- self.class.set_nonce(@controller, nonce)
209
- ["'nonce-#{nonce}'", "'unsafe-inline'"]
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
@@ -1,3 +1,3 @@
1
1
  module SecureHeaders
2
- VERSION = "2.2.0"
2
+ VERSION = "2.2.1"
3
3
  end
@@ -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.0
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-18 00:00:00.000000000 Z
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