secure_headers 2.2.3 → 2.2.4

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: ff92ca9f6816c48cd276c4da21788c681401fded
4
- data.tar.gz: e533e9fcfddaded93b6449612760c45fd4da75c8
3
+ metadata.gz: 8a0931db8855224044856cad01f2226dfb325c93
4
+ data.tar.gz: bc3520f802677b2c7967d9e7ae928c5d6ef4d2ca
5
5
  SHA512:
6
- metadata.gz: 28d1e5956816ceea536220868c6c3df6c8cedfc190d3ad14be24a3cea8465a091668d35e77d6afb14feef5fe0504f65b71e8960e3740afa5af3e1eb7e239ac8d
7
- data.tar.gz: 18f797ba06da2eb6f2ac7b269a55a642a26d143a48f9a4e58989605d9340fec40b9746e227efbadee8c93382f7cddc5202564adadb06d041eb8e0dc995559192
6
+ metadata.gz: 41b4ee3848c1261162c5a5e7f80931a1e7891a08ac0d1f49b5ebfae5ae819f0e8a5b3577499d4cd8d62eaf71d36218bb7bf97cd263d220a67a72e14c8a49dac6
7
+ data.tar.gz: acae6ac54a26a925e3fd74a2b24c50a00349cce8be8d9dca8d81ee1dbae68008defa925bb3a10f99996476687de0b632fca07cfc6d40bd7511dd8acc1cc7a0c1
data/.travis.yml CHANGED
@@ -4,7 +4,6 @@ rvm:
4
4
  - "2.1"
5
5
  - "2.0.0"
6
6
  - "1.9.3"
7
- - "1.8.7"
8
7
  - "jruby-19mode"
9
8
 
10
9
  sudo: false
data/README.md CHANGED
@@ -49,7 +49,7 @@ This gem makes a few assumptions about how you will use some features. For exam
49
49
  config.x_permitted_cross_domain_policies = 'none'
50
50
  config.csp = {
51
51
  :default_src => "https: self",
52
- :enforce => proc {|controller| contoller.current_user.enforce_csp? },
52
+ :enforce => proc {|controller| controller.current_user.enforce_csp? },
53
53
  :frame_src => "https: http:.twimg.com http://itunes.apple.com",
54
54
  :img_src => "https:",
55
55
  :report_uri => '//example.com/uri-directive'
@@ -419,7 +419,7 @@ end
419
419
 
420
420
  * Node.js (express) [helmet](https://github.com/evilpacket/helmet) and [hood](https://github.com/seanmonstar/hood)
421
421
  * Node.js (hapi) [blankie](https://github.com/nlf/blankie)
422
- * J2EE Servlet >= 3.0 [highlines](https://github.com/sourceclear/headlines)
422
+ * J2EE Servlet >= 3.0 [headlines](https://github.com/sourceclear/headlines)
423
423
  * ASP.NET - [NWebsec](https://github.com/NWebsec/NWebsec/wiki)
424
424
  * Python - [django-csp](https://github.com/mozilla/django-csp) + [commonware](https://github.com/jsocol/commonware/); [django-security](https://github.com/sdelements/django-security)
425
425
  * Go - [secureheader](https://github.com/kr/secureheader)
@@ -39,6 +39,9 @@ module SecureHeaders
39
39
  end
40
40
 
41
41
  def ensure_security_headers options = {}
42
+ if RUBY_VERSION == "1.8.7"
43
+ warn "[DEPRECATION] secure_headers ruby 1.8.7 support will dropped in the next release"
44
+ end
42
45
  self.secure_headers_options = options
43
46
  before_filter :prep_script_hash
44
47
  before_filter :set_hsts_header
@@ -2,6 +2,7 @@ require 'uri'
2
2
  require 'base64'
3
3
  require 'securerandom'
4
4
  require 'user_agent_parser'
5
+ require 'json'
5
6
 
6
7
  module SecureHeaders
7
8
  class ContentSecurityPolicyBuildError < StandardError; end
@@ -166,6 +167,21 @@ module SecureHeaders
166
167
  end
167
168
  end
168
169
 
170
+ def to_json
171
+ build_value
172
+ @config.to_json.gsub(/(\w+)_src/, "\\1-src")
173
+ end
174
+
175
+ def self.from_json(*json_configs)
176
+ json_configs.inject({}) do |combined_config, one_config|
177
+ one_config = one_config.gsub(/(\w+)-src/, "\\1_src")
178
+ config = JSON.parse(one_config, :symbolize_names => true)
179
+ combined_config.merge(config) do |_, lhs, rhs|
180
+ lhs | rhs
181
+ end
182
+ end
183
+ end
184
+
169
185
  private
170
186
 
171
187
  def add_script_hashes
@@ -1,3 +1,3 @@
1
1
  module SecureHeaders
2
- VERSION = "2.2.3"
2
+ VERSION = "2.2.4"
3
3
  end
@@ -56,6 +56,23 @@ module SecureHeaders
56
56
  end
57
57
  end
58
58
 
59
+ it "exports a policy to JSON" do
60
+ policy = ContentSecurityPolicy.new(default_opts)
61
+ expected = %({"default-src":["https:"],"script-src":["'unsafe-inline'","'unsafe-eval'","https:","data:"],"style-src":["'unsafe-inline'","https:","about:"],"img-src":["https:","data:"]})
62
+ expect(policy.to_json).to eq(expected)
63
+ end
64
+
65
+ it "imports JSON to build a policy" do
66
+ json1 = %({"default-src":["https:"],"script-src":["'unsafe-inline'","'unsafe-eval'","https:","data:"]})
67
+ json2 = %({"style-src":["'unsafe-inline'"],"img-src":["https:","data:"]})
68
+ json3 = %({"style-src":["https:","about:"]})
69
+ config = ContentSecurityPolicy.from_json(json1, json2, json3)
70
+ policy = ContentSecurityPolicy.new(config.merge(:disable_fill_missing => true))
71
+
72
+ expected = %({"default-src":["https:"],"script-src":["'unsafe-inline'","'unsafe-eval'","https:","data:"],"style-src":["'unsafe-inline'","https:","about:"],"img-src":["https:","data:"]})
73
+ expect(policy.to_json).to eq(expected)
74
+ end
75
+
59
76
  context "when using hash sources" do
60
77
  it "adds hashes and unsafe-inline to the script-src" do
61
78
  policy = ContentSecurityPolicy.new(default_opts.merge(:script_hashes => ['sha256-abc123']))
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.3
4
+ version: 2.2.4
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-08-14 00:00:00.000000000 Z
11
+ date: 2015-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake