secure_headers 6.3.0 → 6.3.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.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +24 -0
- data/.github/workflows/sync.yml +20 -0
- data/.rubocop.yml +1 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +5 -1
- data/Gemfile +1 -0
- data/README.md +44 -3
- data/docs/named_overrides_and_appends.md +3 -1
- data/lib/secure_headers/configuration.rb +11 -0
- data/lib/secure_headers/version.rb +1 -1
- data/lib/secure_headers/view_helper.rb +4 -4
- data/spec/lib/secure_headers/configuration_spec.rb +54 -0
- data/spec/spec_helper.rb +10 -0
- metadata +4 -3
- data/.travis.yml +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b136a1c21b128826c37c798c9e20db99b1d5a5c035001ed8289692ed8f0096f
|
4
|
+
data.tar.gz: d93c60ba6357a9cd8f64c16b53c9f2843753101e1669fb1bbaea56e549d89466
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13083c3da3a4f68d445be6012a1fa6e37c052e6ac6bdc457d379d725383142c8698f91c2d1a6fc75f13bfad52298e291131e9828bb6f6a1fc6b8cba9bc3d5892
|
7
|
+
data.tar.gz: 92214a6b589ba640e504e58f07b051351a7eea7bce87701730101a68a29045fe81c90d79600f00a36ee7bf3e4c5c7c4071ad74b01bab5e40c53751858bc198d7
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: Build + Test
|
2
|
+
on: [pull_request]
|
3
|
+
|
4
|
+
jobs:
|
5
|
+
build:
|
6
|
+
name: Build + Test
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby: [ '2.4', '2.5', '2.6', '2.7' ]
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
15
|
+
uses: actions/setup-ruby@v1
|
16
|
+
with:
|
17
|
+
ruby-version: ${{ matrix.ruby }}
|
18
|
+
- name: Build and test with Rake
|
19
|
+
run: |
|
20
|
+
gem install bundler
|
21
|
+
bundle install --jobs 4 --retry 3 --without guard
|
22
|
+
bundle exec rspec spec
|
23
|
+
bundle exec rubocop
|
24
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This workflow ensures the "master" branch is always up-to-date with the
|
2
|
+
# "main" branch (our default one)
|
3
|
+
name: sync_main_branch
|
4
|
+
on:
|
5
|
+
push:
|
6
|
+
branches: [ main ]
|
7
|
+
jobs:
|
8
|
+
catch_up:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
steps:
|
11
|
+
- name: Check out the repository
|
12
|
+
uses: actions/checkout@v2
|
13
|
+
with:
|
14
|
+
fetch-depth: 0
|
15
|
+
- name: Merge development into master, then push it
|
16
|
+
run: |
|
17
|
+
git pull
|
18
|
+
git checkout master
|
19
|
+
git merge main
|
20
|
+
git push
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 6.3.1
|
2
|
+
|
3
|
+
Fixes deprecation warnings when running under ruby 2.7
|
4
|
+
|
1
5
|
## 6.3.0
|
2
6
|
|
3
7
|
Fixes newline injection issue
|
@@ -372,7 +376,7 @@ Adds `upgrade-insecure-requests` support for requests from Firefox and Chrome (a
|
|
372
376
|
|
373
377
|
## 3.0.0
|
374
378
|
|
375
|
-
secure_headers 3.0.0 is a near-complete, not-entirely-backward-compatible rewrite. Please see the [upgrade guide](https://github.com/twitter/secureheaders/blob/
|
379
|
+
secure_headers 3.0.0 is a near-complete, not-entirely-backward-compatible rewrite. Please see the [upgrade guide](https://github.com/twitter/secureheaders/blob/main/docs/upgrading-to-3-0.md) for an in-depth explanation of the changes and the suggested upgrade path.
|
376
380
|
|
377
381
|
## 2.5.1 - 2016-02-16 18:11:11 UTC - Remove noisy deprecation warning
|
378
382
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# Secure Headers
|
1
|
+
# Secure Headers 
|
2
2
|
|
3
|
-
**
|
3
|
+
**main branch represents 6.x line**. See the [upgrading to 4.x doc](docs/upgrading-to-4-0.md), [upgrading to 5.x doc](docs/upgrading-to-5-0.md), or [upgrading to 6.x doc](docs/upgrading-to-6-0.md) for instructions on how to upgrade. Bug fixes should go in the 5.x branch for now.
|
4
4
|
|
5
5
|
The gem will automatically apply several headers that are related to security. This includes:
|
6
6
|
- Content Security Policy (CSP) - Helps detect/prevent XSS, mixed-content, and other classes of attack. [CSP 2 Specification](http://www.w3.org/TR/CSP2/)
|
@@ -117,7 +117,48 @@ SecureHeaders::Configuration.override(:api) do |config|
|
|
117
117
|
end
|
118
118
|
```
|
119
119
|
|
120
|
-
However, I would consider these headers anyways depending on your load and bandwidth requirements.
|
120
|
+
However, I would consider these headers anyways depending on your load and bandwidth requirements.
|
121
|
+
|
122
|
+
## Acknowledgements
|
123
|
+
|
124
|
+
This project originated within the Security team at Twitter. An archived fork from the point of transition is here: https://github.com/twitter-archive/secure_headers.
|
125
|
+
|
126
|
+
Contributors include:
|
127
|
+
* Neil Matatall @oreoshake
|
128
|
+
* Chris Aniszczyk
|
129
|
+
* Artur Dryomov
|
130
|
+
* Bjørn Mæland
|
131
|
+
* Arthur Chiu
|
132
|
+
* Jonathan Viney
|
133
|
+
* Jeffrey Horn
|
134
|
+
* David Collazo
|
135
|
+
* Brendon Murphy
|
136
|
+
* William Makley
|
137
|
+
* Reed Loden
|
138
|
+
* Noah Kantrowitz
|
139
|
+
* Wyatt Anderson
|
140
|
+
* Salimane Adjao Moustapha
|
141
|
+
* Francois Chagnon
|
142
|
+
* Jeff Hodges
|
143
|
+
* Ian Melven
|
144
|
+
* Darío Javier Cravero
|
145
|
+
* Logan Hasson
|
146
|
+
* Raul E Rangel
|
147
|
+
* Steve Agalloco
|
148
|
+
* Nate Collings
|
149
|
+
* Josh Kalderimis
|
150
|
+
* Alex Kwiatkowski
|
151
|
+
* Julich Mera
|
152
|
+
* Jesse Storimer
|
153
|
+
* Tom Daniels
|
154
|
+
* Kolja Dummann
|
155
|
+
* Jean-Philippe Doyle
|
156
|
+
* Blake Hitchcock
|
157
|
+
* vanderhoorn
|
158
|
+
* orthographic-pedant
|
159
|
+
* Narsimham Chelluri
|
160
|
+
|
161
|
+
If you've made a contribution and see your name missing from the list, make a PR and add it!
|
121
162
|
|
122
163
|
## Similar libraries
|
123
164
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
## Named Appends
|
2
2
|
|
3
|
-
Named Appends are blocks of code that can be reused and composed during requests. e.g. If a certain partial is rendered conditionally, and the csp needs to be adjusted for that partial, you can create a named append for that situation. The value returned by the block will be passed into `append_content_security_policy_directives`. The current request object is passed as an argument to the block for even more flexibility.
|
3
|
+
Named Appends are blocks of code that can be reused and composed during requests. e.g. If a certain partial is rendered conditionally, and the csp needs to be adjusted for that partial, you can create a named append for that situation. The value returned by the block will be passed into `append_content_security_policy_directives`. The current request object is passed as an argument to the block for even more flexibility. Reusing a configuration name is not allowed and will throw an exception.
|
4
4
|
|
5
5
|
```ruby
|
6
6
|
def show
|
@@ -91,6 +91,8 @@ class MyController < ApplicationController
|
|
91
91
|
end
|
92
92
|
```
|
93
93
|
|
94
|
+
Reusing a configuration name is not allowed and will throw an exception.
|
95
|
+
|
94
96
|
By default, a no-op configuration is provided. No headers will be set when this default override is used.
|
95
97
|
|
96
98
|
```ruby
|
@@ -43,6 +43,9 @@ module SecureHeaders
|
|
43
43
|
def override(name, &block)
|
44
44
|
@overrides ||= {}
|
45
45
|
raise "Provide a configuration block" unless block_given?
|
46
|
+
if named_append_or_override_exists?(name)
|
47
|
+
raise AlreadyConfiguredError, "Configuration already exists"
|
48
|
+
end
|
46
49
|
@overrides[name] = block
|
47
50
|
end
|
48
51
|
|
@@ -59,6 +62,9 @@ module SecureHeaders
|
|
59
62
|
def named_append(name, &block)
|
60
63
|
@appends ||= {}
|
61
64
|
raise "Provide a configuration block" unless block_given?
|
65
|
+
if named_append_or_override_exists?(name)
|
66
|
+
raise AlreadyConfiguredError, "Configuration already exists"
|
67
|
+
end
|
62
68
|
@appends[name] = block
|
63
69
|
end
|
64
70
|
|
@@ -68,6 +74,11 @@ module SecureHeaders
|
|
68
74
|
|
69
75
|
private
|
70
76
|
|
77
|
+
def named_append_or_override_exists?(name)
|
78
|
+
(defined?(@appends) && @appends.key?(name)) ||
|
79
|
+
(defined?(@overrides) && @overrides.key?(name))
|
80
|
+
end
|
81
|
+
|
71
82
|
# Public: perform a basic deep dup. The shallow copy provided by dup/clone
|
72
83
|
# can lead to modifying parent objects.
|
73
84
|
def deep_copy(config)
|
@@ -21,7 +21,7 @@ module SecureHeaders
|
|
21
21
|
def nonced_stylesheet_link_tag(*args, &block)
|
22
22
|
opts = extract_options(args).merge(nonce: _content_security_policy_nonce(:style))
|
23
23
|
|
24
|
-
stylesheet_link_tag(*args, opts, &block)
|
24
|
+
stylesheet_link_tag(*args, **opts, &block)
|
25
25
|
end
|
26
26
|
|
27
27
|
# Public: create a script tag using the content security policy nonce.
|
@@ -39,7 +39,7 @@ module SecureHeaders
|
|
39
39
|
def nonced_javascript_include_tag(*args, &block)
|
40
40
|
opts = extract_options(args).merge(nonce: _content_security_policy_nonce(:script))
|
41
41
|
|
42
|
-
javascript_include_tag(*args, opts, &block)
|
42
|
+
javascript_include_tag(*args, **opts, &block)
|
43
43
|
end
|
44
44
|
|
45
45
|
# Public: create a script Webpacker pack tag using the content security policy nonce.
|
@@ -49,7 +49,7 @@ module SecureHeaders
|
|
49
49
|
def nonced_javascript_pack_tag(*args, &block)
|
50
50
|
opts = extract_options(args).merge(nonce: _content_security_policy_nonce(:script))
|
51
51
|
|
52
|
-
javascript_pack_tag(*args, opts, &block)
|
52
|
+
javascript_pack_tag(*args, **opts, &block)
|
53
53
|
end
|
54
54
|
|
55
55
|
# Public: create a stylesheet Webpacker link tag using the content security policy nonce.
|
@@ -59,7 +59,7 @@ module SecureHeaders
|
|
59
59
|
def nonced_stylesheet_pack_tag(*args, &block)
|
60
60
|
opts = extract_options(args).merge(nonce: _content_security_policy_nonce(:style))
|
61
61
|
|
62
|
-
stylesheet_pack_tag(*args, opts, &block)
|
62
|
+
stylesheet_pack_tag(*args, **opts, &block)
|
63
63
|
end
|
64
64
|
|
65
65
|
# Public: use the content security policy nonce for this request directly.
|
@@ -34,6 +34,60 @@ module SecureHeaders
|
|
34
34
|
expect(Configuration.overrides(:test_override)).to_not be_nil
|
35
35
|
end
|
36
36
|
|
37
|
+
describe "#override" do
|
38
|
+
it "raises on configuring an existing override" do
|
39
|
+
set_override = Proc.new {
|
40
|
+
Configuration.override(:test_override) do |config|
|
41
|
+
config.x_frame_options = "DENY"
|
42
|
+
end
|
43
|
+
}
|
44
|
+
|
45
|
+
set_override.call
|
46
|
+
|
47
|
+
expect { set_override.call }
|
48
|
+
.to raise_error(Configuration::AlreadyConfiguredError, "Configuration already exists")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "raises when a named append with the given name exists" do
|
52
|
+
Configuration.named_append(:test_override) do |config|
|
53
|
+
config.x_frame_options = "DENY"
|
54
|
+
end
|
55
|
+
|
56
|
+
expect do
|
57
|
+
Configuration.override(:test_override) do |config|
|
58
|
+
config.x_frame_options = "SAMEORIGIN"
|
59
|
+
end
|
60
|
+
end.to raise_error(Configuration::AlreadyConfiguredError, "Configuration already exists")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#named_append" do
|
65
|
+
it "raises on configuring an existing append" do
|
66
|
+
set_override = Proc.new {
|
67
|
+
Configuration.named_append(:test_override) do |config|
|
68
|
+
config.x_frame_options = "DENY"
|
69
|
+
end
|
70
|
+
}
|
71
|
+
|
72
|
+
set_override.call
|
73
|
+
|
74
|
+
expect { set_override.call }
|
75
|
+
.to raise_error(Configuration::AlreadyConfiguredError, "Configuration already exists")
|
76
|
+
end
|
77
|
+
|
78
|
+
it "raises when an override with the given name exists" do
|
79
|
+
Configuration.override(:test_override) do |config|
|
80
|
+
config.x_frame_options = "DENY"
|
81
|
+
end
|
82
|
+
|
83
|
+
expect do
|
84
|
+
Configuration.named_append(:test_override) do |config|
|
85
|
+
config.x_frame_options = "SAMEORIGIN"
|
86
|
+
end
|
87
|
+
end.to raise_error(Configuration::AlreadyConfiguredError, "Configuration already exists")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
37
91
|
it "deprecates the secure_cookies configuration" do
|
38
92
|
expect {
|
39
93
|
Configuration.default do |config|
|
data/spec/spec_helper.rb
CHANGED
@@ -45,10 +45,20 @@ module SecureHeaders
|
|
45
45
|
def clear_default_config
|
46
46
|
remove_instance_variable(:@default_config) if defined?(@default_config)
|
47
47
|
end
|
48
|
+
|
49
|
+
def clear_overrides
|
50
|
+
remove_instance_variable(:@overrides) if defined?(@overrides)
|
51
|
+
end
|
52
|
+
|
53
|
+
def clear_appends
|
54
|
+
remove_instance_variable(:@appends) if defined?(@appends)
|
55
|
+
end
|
48
56
|
end
|
49
57
|
end
|
50
58
|
end
|
51
59
|
|
52
60
|
def reset_config
|
53
61
|
SecureHeaders::Configuration.clear_default_config
|
62
|
+
SecureHeaders::Configuration.clear_overrides
|
63
|
+
SecureHeaders::Configuration.clear_appends
|
54
64
|
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: 6.3.
|
4
|
+
version: 6.3.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: 2020-
|
11
|
+
date: 2020-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -33,12 +33,13 @@ extra_rdoc_files: []
|
|
33
33
|
files:
|
34
34
|
- ".github/ISSUE_TEMPLATE.md"
|
35
35
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
36
|
+
- ".github/workflows/build.yml"
|
37
|
+
- ".github/workflows/sync.yml"
|
36
38
|
- ".gitignore"
|
37
39
|
- ".rspec"
|
38
40
|
- ".rubocop.yml"
|
39
41
|
- ".ruby-gemset"
|
40
42
|
- ".ruby-version"
|
41
|
-
- ".travis.yml"
|
42
43
|
- CHANGELOG.md
|
43
44
|
- CODE_OF_CONDUCT.md
|
44
45
|
- CONTRIBUTING.md
|
data/.travis.yml
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
|
3
|
-
rvm:
|
4
|
-
- ruby-head
|
5
|
-
- 2.5
|
6
|
-
- 2.6
|
7
|
-
- 2.7
|
8
|
-
- jruby-head
|
9
|
-
|
10
|
-
env:
|
11
|
-
- SUITE=rspec spec
|
12
|
-
- SUITE=rubocop
|
13
|
-
|
14
|
-
script: bundle exec $SUITE
|
15
|
-
|
16
|
-
matrix:
|
17
|
-
allow_failures:
|
18
|
-
- rvm: jruby-head
|
19
|
-
- rvm: ruby-head
|
20
|
-
|
21
|
-
before_install:
|
22
|
-
- gem update --system
|
23
|
-
- gem --version
|
24
|
-
- gem update bundler
|
25
|
-
bundler_args: --without guard -j 3
|
26
|
-
|
27
|
-
sudo: false
|
28
|
-
cache: bundler
|